【音效】Unity 性能 Review
本文首发于知乎专栏:MACK的游戏开发笔记,欢迎各位关注。
这里记录了一些Unity音频性能的优化点,有些会当作规范在每个版本尾期检查,提升一些性能(主要是内存)。Unity的音频使用的是集成过的FMOD。一开始我对音频进行了进一步的封装,一方面可以方便的集成到CMT中,另一方面提供了一行代码就可以播放音效的接口。不过在项目中期为了更好的效果和开发效率,我们改成了FMOD Studio。
FMOD Studio和Unity编辑器解耦,自带可视化的事件参数编辑系统,实时的联调界面和性能分析工具,支持更高级的混淆效果等等。其实我也不了解。。。程序只要抛出事件,音频开发就可以在Studio中可视化编辑,包括一些随机逻辑,分组管理,降低或加强某些音效等等,可以减少很多程序的开发量也更灵活。不过不得不说,在热更,性能,已经和Unity编辑器集成度上还有花了一点精力踩了一些坑。特别是P4的只读属性的问题,在集成到我们的自动构建系统上搞到了半夜。。。
另外需要注意的时,如果使用了第三方的插件,可以关闭Unity的音效引擎减小性能开销:
FMOD的插件有一些GC问题,播放音效和设置参数的接口都存在一个字符串拼接产生的GC开销,另外FMOD的调试窗口使用OnGUI不管是否开启都会产生C++到C#的开销,并且获得是否现实调试窗口也会产生固定的GC。
下面是很久以前使用Unity自带FMOD时,优化检查的设置:
音乐设置:
Force to Mono:关闭立体声音效减小一倍。
Preload Audio Data:预加载减少卡顿,打开
LoadType:Decompress On Load,加载后解压缩。一般用于较小的音效,避免运行时解压缩的性能开销。
Compression Format:ios平台建议mp3压缩格式(Ios设备自带mp3的硬件解码器),android平台推荐vorbis压缩格式。
Quality:播放质量可以降低质量减少包体和内存占用。
LoadType:CompressedIn Memory,播放时解压,在内存中时压缩的,增加CPU开销但节省内存。用在一些较大的文件并且不经常播放。如果是BGM要设置成Stream from disc从磁盘流读取,节省内存。