内存分析工具:Profiler
打开方式 window- Analysis-Proflier
unity会自动获取这一帧的内存占用数据项,主要分为:Other、Assets、BuiltinResources、Scene Memory、NotSaved这五大部分。
Other
重点监控对象:
ManagedHeap.UsedSize:托管堆使用大小。不要让它超过20MB,否则可能会有性能问题!
SerializedFile:序列化文件,把显示中的Prefab、Atlas和metadata等资源加载进内存。这里就是你要监控的哪些预设在序列化中在内存中占用大小,根据需求进行优化。
PersistentManager.Remapper:持久化数据重映射管理相关。与持久化数据相关,比如AssetBundle之类的。注意监控相关的文件。
Assets
场景当中没有用东西全部干掉。
AudioClip:音效及声音文件
重点优化对象,播放时长较长的音乐文件需要进行压缩成.mp3或.ogg格式,时长较短的音效文件可以使用.wav 或.aiff格式。
Texture2D: 2D贴图及纹理。
- 1、许多贴图采用的Format格式是ARGB 32 bit所以保真度很高但占用的内存也很大。在不失真的前提下,适当压缩贴图,使用ARGB 16 bit就会减少一倍,如果继续Android采用RGBA Compressed ETC2 8 bits(iOS采用RGBA Compressed PVRTC 4 bits),又可以再减少一倍。把不需要透贴但有alpha通道的贴图,全都转换格式Android:RGB Compressed ETC 4 bits,iOS:RGB Compressed PVRTC 4 bits。
- 2、当加载一个新的Prefab或贴图,不及时回收,它就会永驻在内存中,就算切换场景也不会销毁。应该确定物体不再使用或长时间不使用就先把物体制空(null),然后调用Resources.UnloadUnusedAssets(),才能真正释放内存。
- 3、有大量空白的图集贴图,可以用TexturePacker等工具进行优化或考虑合并到其他图集中。
Scene Memory
- 1、尽量减少点面数,能合并的mesh尽量合并。
其他
- 1、尽量少用LINQ
- 2、控制StartCoroutine的次数
- 3、使用StringBuilder替代字符串直接连接
- 4、场景中如果有一些在开发初期放置的Cube之类的,会默认使用标准的Unity Shader资源,要删掉这些资源。
- 5、渲染质量设置Quality Settings
Edit->Project Settings->Quality
详细看各项说明含义https://www.cnblogs.com/lancidie/p/6971354.html
网友评论