Q&A——资源管理(四)

C++ 异常安全(四):RAII — 核心资源管理方案 (Resource Acquisition Is Initialization,资源获取即初始化)是 C++ 核心资源管理方案,也是保障异常安全编程的核心模式。RAII 的核心思想是将资源的生命周期与拥有该资源的对象的生命周期绑定,通过利用对象的构造函数和析构函数来自动管理资源,确保资源在使用完毕后能够正确释放,从而避免内存泄漏和其他资源管理错误。 阅读详情

资源管理

Q1:Unity 5.x 能把指定集合的Mesh烘焙到一张Lightmap里吗?

Unity 5.x 是没有这样的功能项的。据我们的判断,这样的需求通常是为了动态加载,因此可以尝试将Mesh分组到不同的场景分别烘焙。而在加载时可通过脚本动态地合并Lightmap,同时将物件的Lightmap Index进行正确的偏移即可。

资源管理

Q2:请问一下,我两个预设都引用了第三个AssetBundle的贴图,如果不希望这张贴图存在两份,一定要等这两个预设都加载好了,才能卸载贴图的AssetBundle吗 ?

是的,但并不是因为这样做会使“这张贴图存在两份”,而是因为如果先卸载贴图的AssetBundle会导致后续加载两个预设时会丢失依赖,即找不到贴图。如果脚本中会对这个情况进行检查并重新加载贴图的AssetBundle,那么此时才会造成“这张贴图存在两份”的问题。


资源管理

Q3: 关于Loading.ReadObject耗费比较高,有什么推荐的方法吗?

Loading.ReadObject是Unity引擎的资源加载函数,一般出现在切换场景和加载API调用时,这其中包括纹理、网格、Material、Shader、AnimationClip等资源。如果你发现该值过高,建议去大力优化加载的相关资源。对于每种资源的加载,我们正在以专题的方式进行总结和分享,建议大家可以先查看以下内容:
加载模块之纹理
加载模块之网格
加载模块之Shader

资源管理

Q4:请问音频中的 Quality 什么意思?一般设置为多少合适?我拖进去一首歌曲,试了一下 在0 和 100 的情况下区别不大,但是生成的音频文件大小差别很大。

UWA Tech Doc

Quality 表示在压缩音频时的失真程度(实际上可以认为是压缩算法的一个参数),该值越大,压缩后的文件越大,但音质保留的越好。而对于其失真的程度是视音频数据以及内部的压缩算法而定的,确实会有区别不大的情况。该值的设置原则就是,在音质失真可接受的情况下,越小越好。


资源管理

Q5: 我做的预设用到了这个字体

UWA Tech Doc
我将这个预设打成AssetBundle包,通过Profiler分析时发现占了两份内存。

UWA Tech Doc
下面这个SIMHEI应该是那个TTF的,为什么会占两份内存呢?

通常TTF文件会包含一个字体的多个字型,如可能包含正常字型、加粗字型、斜体字型等。而在Unity中会将其分为不同的Font资源,且他们之间会相互依赖。所以,如果项目中确实需要加粗字型的话,内存里出现两个Font是正常的,但如果实际上不需要加粗,那么可以尝试寻找一个不包含加粗字型的字体文件来替换该TTF文件。


资源管理

Q6: 我在Profiler中看到GameObject.Deactivate耗时较大,请问该如何优化?

实际上GameObject.Activate/Deactivate本身通常不会产生很高的开销,主要都是由其上或其子节点上的组件的OnEnable/OnDisable操作引起,比如UI相关的组件在OnEnable和OnDisable中都会有较多的操作,所以较复杂的UI界面的GameObject.Activate/Deactivate会有很高的开销。因此,针对这一问题,如果是由自定义的脚本造成,那么就需要考虑优化OnEnable/OnDisable的逻辑;如果是UI,那么可以对频繁切换激活状态的UI采用平移出屏幕、修改Culling Layer等方式来替换。


资源管理

Q7: 我有一个特效依赖了两个FBX。我把这两个FBX的这个勾选去掉,Editor运行正常。

UWA Tech Doc
否则就会宕机,请问这是什么原因?

将FBX上的Read/Write Enabled关闭后,内存中便不再保存其Mesh的副本(只存在显存中),因此其属性就不可再被访问和修改。而粒子系统通常需要动态地修改其粒子的顶点属性。因此,理论上来说,供粒子系统使用的Mesh是需要开启Read/Write Enabled的,而在Editor下Mesh和Texture都是强制开启的,所以在真机上就会出现问题。


资源管理

Q8:字体作为多个资源的依赖包,会在游戏中被加载多次。我们现在有个问题,AssetBundle A资源依赖于这个字体,加载A的时候加载了一份字体,然后B资源也依赖这字体,而后加载B的时候我们没有去重复加载字体,这时候发现B资源上出现了字体丢失的现象。

请问加载资源的时候,Unity会自动去识别内存里是否有它的资源依赖包吗?如果有的话,为什么B加载的时候找不到已经存在内存中的字体?这里需要手动去做些什么处理吗?

同时我发现依赖包资源如果进行了bundle.m_AssetBundle.Unload(false)以后,其他依赖于这个包的资源就引用不到了。我们流程上对于每个读进来的AssetBundle,都会加载完后马上进行Unload(false),请问如果是依赖包的话,是不是不能对其进行这步操作?

Unity引擎是会自动根据依赖关系去搜寻依赖的资源的,但需要注意的是,依赖的AssetBundle文件必须存在。也就是说,依赖关系包如果后续还会使用的话,是不应该被Unload的,否则后续AssetBundle加载上来后,被依赖的资源是无法找到的。对于Unity 5.3之前的版本,出于内存的考虑,开发团队可以通过CreateFromFile或LoadFromCacheorDownload来加载AssetBundle,既可以保留AssetBundle之间的依赖关系,同时又不会产生Webstream。

开发团队可以参考你应该了解的AssetBundle管理机制,进一步了解相关API。

资源管理

Q9:SkinnedMeshRenderer.BakeMesh这个函数一般是什么时候调用呢?在Instantiate后调用么?

SkinnedMeshRenderer.BakeMesh 的作用在于:将一个蒙皮动画的某个时间点上的动作,Bake成一个不带蒙皮的Mesh,从而可以通过自定义的采样间隔,将一段动画转成一组Mesh序列帧。而后在播放动画时只需选择最近的采样点(即一个Mesh)进行赋值即可,从而省去了骨骼更新与蒙皮计算的时间。

该方法的优点是用内存换计算时间,在场景中大量出现同一个带动画的模型时,效果会非常明显。该方法的缺点是内存的占用极大地受到模型顶点数、动画总时长及采样间隔的限制。因此,该方法只适用于顶点数较少,且动画总时长较短的模型。同时,Bake的时间较长,因此需要在加载场景时完成。

比较经典的适用场景为MOBA游戏中的小兵。

资源管理

Q10:将Shader独立打包,如果我在启动游戏的时候加载一次,那么之后切换场景是不是就不用每次都加载了?

确切地说,要达到后续Shader都不出现加载开销,需要满足以下两个条件:
(1)包含Shader的AssetBundle文件常驻内存;
(2)Shader已经全Load加载好;

只要满足这两个条件,后续加载好的GameObject,但凡依赖于这些Shader的,都会直接拿来进行使用,而不会再有加载和解析开销。


Q-Dir:提升文件整理效率的第三方资源管理工具 第三方资源管理系统是IT行业中的关键工具,它协助用户管理和优化各种软件和硬件资源。这些系统通常提供集中式的管理平台,可实现跨设备、跨平台的资源调配和监控。第三方资源管理系统,简言之,就是一个独立于原始硬件和软件供应商的管理工具。这类系统的主要任务是提供对网络、服务器、应用等IT资源的全面控制和管理。快速访问面板是用户日常工作中频繁使用的重要功能。通过自定义面板,用户可以快速访问常用的应用程序、文件、文件夹或网络位置。定制面板的过程需要考虑以下几个技巧:组织和分类。 阅读详情

相关推荐

【Clickhouse从入门到精通】第51篇:ClickHouse权限管理体系详解

摘要 本文是ClickHouse权限管理系列文章的第51篇,重点解析ClickHouse RBAC权限体系中的GRANT/REVOKE机制。文章详细介绍了GRANT语句的基础语法与权限类型,包括SELECT、INSERT等常规权限以及WITH GRANT OPTION转授权功能。特别深入讲解了列级权限的实现方式,通过SELECT(col1,col2)语法实现字段粒度的访问控制,并展示了权限查询与验证方法。本文还对比了ClickHouse 20.4版本前后权限管理体系的差异,为构建安全的多租户数据平台提供了关

xyghehehehe的专栏 441

Q&A——资源管理(一)

资源管理 Q1:iOS上PVRTC不支持NPOT的贴图压缩,在Android上可以用ETC2,但在iOS上不能压缩,内存消耗大。请问在iOS上有没有好的处理方案? ETC2仅能在支持OpenGL ES3.0的手机上进行使用,请研发团队在使用前谨慎考察支持ES3.0的手机在国内的覆盖范围。 PVRTC不支持NPOT的贴图压缩,这是Apple规定的,上层应用无权对此更改。我们仅能建议

起个名字好难啊 606

从零到一:如何用YOLOv8和PyQt5打造你的第一个花卉识别桌面应用

本文详细介绍了如何使用YOLOv8和PyQt5从零开始构建一个花卉识别桌面应用。涵盖环境搭建、数据准备、模型训练、界面设计、模型集成与性能优化等全流程,帮助开发者快速掌握深度学习目标识别技术的实际应用。

weixin_29048775的博客 455

unity profiler - Loading.ReadObject

关于Loading.ReadObject耗费比较高,有什么推荐的方法吗? Loading.ReadObject是Unity引擎的资源加载函数,一般出现在切换场景和加载API调用时,这其中包括纹理、网格、Material、Shader、AnimationClip等资源。如果你发现该值过高,建议去大力优化加载的相关资源。对于每种资源的加载,我们正在以专题的方式进行总结和分享,建议大家可以先查看以...

weixin_34203426的博客 648

ESP32S3学习——i2c,点亮0.96寸oled

ESP32S3学习——i2c,点亮0.96寸oled

HandBAI的博客 1万+

保姆级教程:用R包ggpicrust2搞定PICRUSt2功能预测,从差异分析到热图PCA一键出图

本文提供了一份详细的ggpicrust2使用指南,帮助用户从零开始完成PICRUSt2功能预测数据的差异分析和可视化。通过安装配置、数据导入、差异分析到高级可视化(如热图和PCA)的全流程讲解,即使是初学者也能快速掌握发表级图表的生成技巧。

weixin_33712987的博客 386

项目随笔 一 :SetActive 优化

一 优化目的 SetActive 应该是在用unity开发的当中使用最多的一个方法之一 在ui中使用可能会更多 为了应对各种各样的需求 我们可能会在代码中使用大量的 SetActive(true) SetActive(false)...... 但是 很多说优化的文章都会让尽量减少使用这个方法, 因为这是个坑.... 简单做一下测试 一个ui 只有一个image的前提下 updat...

u014746275的博客 7918

YonBIP 3.0 报表开发+报表超链接

用友报表开发

m0_55096250的博客 1769

粒子系统优化:Mesh模式下的优化策略

在上一期《动画优化:关于AnimationClip的三两事》中,我们针对动画优化中的“AnimationClip的压缩方式”以及“AnimatorController挂载的AnimationState”做了解释。这些看似细小的知识点,很容易在大家的开发和学习过程中被疏忽,而长期的问题积累最终都会反映到项目的性能表现上。为此,我们将这些规则列出,并且以一个个知识点的形式向大家逐一解读。 本期,我们将面向粒子系统,讲解UWA本地资源检测中的规则:“网格发射数超过5的粒子系统”、“检测粒子系统使用的网格Read

UWA—简单优化,优化简单! 1513

ADB加密实例

主要介绍如何给adb命令增加加密访问

四儿家的小祖宗的博客 2912

AE 与 ISP 参数联动机制解析:自动曝光系统与图像信号处理模块协同设计实践

AE(自动曝光)并不是一个独立的图像控制模块,而是与 ISP(Image Signal Processor)深度耦合运作的系统协同体。其输出的曝光参数直接决定了图像处理链路中 Gamma 曲线选择、黑电平补偿、去噪级别、边缘增强等一系列关键参数的取值。本文基于主流平台(如高通、MTK、海思)的工程实战经验,详细剖析 AE 与 ISP 在曝光驱动、调节优先级、图像还原逻辑等环节的联动机制,并结合拍照与视频等不同场景,给出可落地的联调方法。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1528

项目的整理游戏优化(为自己)2017

Transform.SetParent GameObject.Deactivate/Active MipmapVisualization Unity3D性能优化:ShaderLab内存占用 前言: 手机的内存占用一直是项目优化的重要部分。最近优化项目的内存占用时。发现了个占用比较恐怖的地方。 那就是ShaderLab 正文: 从上图(进入战斗场景时的内存快照)可以看出,ShaderLab占用居然达到42M(请忽略其他项数据,因为还没优化到=。=)。 为什么Shader的占用...

蛰伏--当你不够强大时,就不要放弃努力 1908

基于Python的电商平台商品信息爬取与价格监控系统设计与实现

本文详细介绍了一个基于Python的电商平台商品信息爬取与价格监控系统的设计与实现。系统采用最新的Python爬虫技术栈,包括Scrapy框架、Selenium自动化测试工具、BeautifulSoup解析库等,实现了对主流电商平台商品信息的自动化采集、存储、分析和可视化展示。文章从系统架构设计、关键技术实现、核心代码解析等方面进行了全面阐述,并提供了完整的代码实现。该系统不仅适用于毕业设计,也可作为商业价格监控系统的原型。关键词:Python爬虫;电商数据采集;价格监控;Scrapy;Selenium;

2201_76125261的博客 964

Q&A——资源管理(十)

资源管理 Q1:关于定位游戏中冗余资源引用的问题。UWA的报告中能定位到具体的引用代码么? 在Profiler只能看到ManagedStaticReferences但是具体不到引用的位置。比如Static ClassA引用一个ClassB,ClassB上引用了一个资源,就定位不出这个引用的过程。请问这种情况下有没有比较好的方法找到引用关系呢? 该问题在Unity 5.3 之前的版本

起个名字好难啊 1352

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Q&A——资源管理(十一)

资源管理 Q1:怎么去掉Mesh中的Colors属性?我把FBX里的LayerElementColor字段都删了,这个Colors还是存在。 默认情况下,在3d建模软件中并不会导出Color属性。以3ds max为例,Color通常是通过modifier添加的,因此只需要在导出前将其删除即可。另外也可以通过fbx sdk来直接对文件进行处理,但这种做法就需要查看官方的文档了。

起个名字好难啊 935

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Q&A——资源管理(三)

资源管理 Q1:StreamingAssetPath 和 PersistantDataPath下可以不Load AssetBundle ,直接放资源Load吗? 这是可以的,但非常有限。因为不通过 AssetBundle 加载,只能通过 Unity 提供的有限的接口来直接加载外部资源,如通过 WWW.audioClip 直接加载 mp3文件,通过 WWW.texture 直接加载

起个名字好难啊 472

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Q&A——资源管理(七)

资源管理 Q1:我想请教一下,下图这个函数中,每次我都申请了一个List temp = list();在这里存放6KB的数据,但是如果不做GC处理,这6KB是否就一直累加,直到做GC处理了才会释放掉,是这样么?如果调用次数很多,每次都调用一点点,也会推高内存占用吗? A:是的,这个6KB堆内存会随着Update的执行一直分配内存,所累积的堆内存会在GC触发时进行销毁。一般来说,研发

编程小生的专栏 884

Q&A——资源管理(六)

资源管理 Q1:请教个问题,我用Unity 5 里提供的Sprite Packer把A.png,B.png打进一张图集,在运行时我怎么方便地加载这两张图呢?使用场景:某个Image控件根据不同的条件显示A,或者显示B。 目前通常是在脚本序列化信息中保留这两个Sprite的引用,在切换时直接通过对Image.sprite进行赋值来切换。

起个名字好难啊 1200

Q&A——资源管理(十二)

资源管理 Q1:我们在做依赖打包改进,比如UIAtlas这种脚本,AssetBundle包里脚本没有做依赖,每个包里都有这个脚本,会导致Mono堆内存增大么?对于“脚本也是资产”这一点理解的不是很透彻。脚本在AssetBundle里是不会启动,但是会出现脚本丢失。本身没有做依赖打包的话脚本是冗余在AssetBundle中吧? 首先,需要说明的是,脚本本身的内容是不会被打包到Asse

起个名字好难啊 1100

【Cocos Creator UI资源管理】

ui资源管理框架

Javaigood的博客 1611

Q&A——资源管理(五)

资源管理 Q1:Unity中的SerializedFile是怎么产生的?请问用Unload(false)可以清除吗?因为读取了Bundle里面的内容后已经赋值给其他物体了。而且我把图片都打成了Bundle,然后读取出来,图片的大小应该是超过了这个SerializedFile的大小的? SerializedFile是AssetBundle加载时产生的序列化信息,一般为LoadFr

起个名字好难啊 817

Q&A——资源管理(八)

资源管理 Q1: 我使用Shader.WarmupAllShaders操作,在后续加载资源还是有CreateGPUProgram出现。(Shader都在一个AssetBundle文件中,都是常驻内存的,不会删掉)是必须使用ShaderVariantCollection来加载Shader吗? A:以上这种问题的较大可能是:Shader被打包到不同AssetBundle中了,WarmupA

编程小生的专栏 786

Q&A——资源管理(十四)

资源管理 Q1:我的游戏运行一段时间之后,已经切换到一个空场景了,然后手动调用了System.GC.Collect(); Resources.UnloadUnusedAssets();为什么还是会有这么多贴图资源被引用呢。我猜可能是由于一些脚本中的静态变量引用导致,请问有办法查出来是哪些静态变量吗? 很大可能是这些资源直接或间接被其他Container缓存了,这种情况在我们进行内存

起个名字好难啊 585
上一篇: Q&A——资源管理(三)
下一篇: Q&A——资源管理(五)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值