陆续记录学习到的优化方法以供日后自己和别人参考
B站原视频链接
Animator.SetTrigger…
如图所示,当我们调用Animator.SetTrigger的时候往往都习惯传字符串作为参数(是我,是我,就是我),这当然是因为穿字符串代码阅读起来直白一些。但是Unity其实不会直接使用这个字符串去索引而是先做一个哈希转换再用结果去索引。当代码里面有大量调用的时候,就会产生很多不必要的转换运算造成性能浪费。
解决方法图中亦有说到,就是先自己用Animator.StringToHash做一次转换并把值存起来去调用。
图中提到的Material和Shader相关接口的调用也可以通过类似的操作去进行优化。
Texture Import Settings
如图可以看到,左右两边的屋子用了同一张texture,不过因为使用了不同的导入设置使得他们占用的空间大小差了数倍之多。我们要注意根据各自项目的需求,去调整导入资源的设置从而达到达到满意的表现效果的同时,可以节约更多的资源空间。
下面这张图就给出了导入设置比较常见的优化项,大家可以根据自己的项目去考量和调整。
- Max Size to Minimun: 将texture的最大上限设置成对应平台的最小值以节约空间
- POT: power of two, 即二的幂次方。这里指图集的size最好为二的幂次方否则有些压缩格式不支持
- Remove Alpha Channel: 不需要透明通道的就去掉。
- Read/Write Enabled: 如果不需要代码里面去获取和修改texture底层数据的就关掉,节约内存空间。因为如果打开了内存里会保留两份同样的texture去做修改和保存的操作
- 16bit Color: 根据自己项目看看是否16位色位就够了,是否需要去到32位
- Disable Mipmaps for UI: mipmaps就不详谈了,简单来说就是所以不需要跟相机的深度产生交互,即Z轴不会影响表现的UI,都可以把这个去掉,节约空间
Mesh Import Settings
作为资源大哥之一的Mesh的相关设置怎么可以少得了呢 😛
- Mesh Compression: 尽可能选择压缩度更高的压缩格式去节约磁盘空间
- Read/Write Enabled: 同texture
- Rig: 如果这个mesh不涉及动画就可以把这个关闭
- Blendshapes: 这玩意我没在项目中用过,查了一下也是不知其所以然。如果没用到就关掉吧
- Normals and Tangents: 如果mesh没用到也请关闭
General Graphic Tips
- Batching: 这个比较广也比较老生常谈了,网上很多相关资料
- Disable Shadow Casting: 关闭生成阴影(根据需求)
- Light’s Culling: 给光加遮罩层,可以保证让光只影响需要光照的目标,减少负担
- Avoid mobile native resolution: 我们可以根据需求手动设置在移动设备上的分辨率而不是使用手机自身的分辨率。因为当前市面上的手机分辨率很多机型都去到了极高的分辨率,而渲染过高的分辨率会带来优化和发热等问题。不过,要设置多少分辨率才能带来一个满意的感官体验又不会造成过高的渲染负担就需要诸君多去调试,然后找到一个适合你们项目的平衡点了
- Graphic Raycaster: 不需要点击的UI可以关闭掉raycast target选项
Audio Import Setting
- Force To Mono: 如果音频文件不需要双声道效果,勾选此项把音频变成单声道可以节省一半内存和磁盘空间
- 可以根据项目的音质需求,降低比特率减少磁盘空间
- 不同平台对不同格式的音频文件有硬件上的支持,所以尽量将音频文件压缩格式根据对应平台做出调整。比如iOS适合MP3, Android适合Vorbis。
- Load Type: 根据音频文件大小不同,解压加载方式也有不同的推荐。小于200KB的可以使用加载时解压,而大于200KB的文件,由于内部内存管理的问题,还是会被分配到原来的大小;而更大一些的则使用Streaming