Unity3D技术之移动开发性能分析详解
性能分析
在Unity开发中,了解Unity分析器使用的端口是进行性能分析的基础。以下是相关端口信息:
- 多播端口 (MulticastPort):54998
- 侦听端口 (ListenPorts):55000 - 55511
- 多播(单元测试):55512 - 56023
内存不足崩溃
理论上,游戏应该能够稳定良好地运行。但在实际开发和运行过程中,游戏可能会因“内存不足”而崩溃。当出现此问题时,需要比较常规游戏内存占用情况和崩溃时分配的内存空间大小。如果两者数值相差较大,则意味着存在内存峰值。以下是可能导致内存峰值的潜在原因及相应的解决办法:
同时加载两个大场景
在游戏开发中,若同时加载两个较大的场景,会瞬间占用大量内存。解决办法是在两个较大的场景之间使用一个空场景进行过渡,避免内存的集中占用。
加载附加场景
加载附加场景时,场景中可能包含一些无用的部分,这些无用部分会占用额外的内存。因此,需要对附加场景进行清理,移除无用的对象和资源,以维护内存空间的合理大小。
加载巨大的资源包至内存
将巨大的资源包加载到内存中会显著增加内存压力。另外,通过 WWW 或大量大对象的实例化来加载资源时,也容易导致内存问题。例如,未进行适当压缩的纹理(不适用于移动设备),由于其数据量较大,会占用过多的内存。建议对纹理进行适当压缩,以减少内存占用。
启用获取/设置 (Get/Set) 像素的纹理
当启用获取/设置 (Get/Set) 像素的纹理时,Unity 需要使用一份内存中未压缩的纹理副本,这会额外增加内存开销。在开发过程中,应谨慎使用此功能,除非确实有必要。
纹理解压问题
从 JPEG/PNG 加载的纹理在运行时基本上不会解压,但如果将大 mp3 文件标记为加载时解压缩,会在加载时产生较大的内存开销。因此,对于大的音频文件,应根据实际需求合理设置解压方式。
异常缓存中保存不用的资源
在静态 monobehavior 字段等异常缓存中保存不用的资源,会导致在变更场景时,这些资源不会被清理,从而持续占用内存。开发人员需要仔细检查代码,确保不在异常缓存中保存无用的资源,及时清理不再使用的资源,以释放内存。