UNITY性能优化参考篇
下面是我给项目组的一些参考。其中也包含各种各样的标准,与优化建议。项目优化并不是一件事,它是点点滴滴串联起来的(勿以恶小而为之),我见过很多项目只是图一时之方便就导致后期很难做 比如 前期未规划好图集,模型贴图材质目录混用,UI制作未按照 复用/特殊 的标准制作,动画导出帧率不统一高高低低 等等。如果一开始没有定制良好的规范,后面想要补救只能靠程序写一些工具批量处理,当然这工具也不一定好写。
因为效率优化是一个很泛化的词。所以在这里我只讨论大类进而衍生出 “标准做法”。标准只说通用的,做了不会错的那种。如果你没有做 推荐你试一试。像如同项目贴图设置,灯光设置,烘焙,fog,等 设置问题这里不谈。因为设置的选项是最容易做优化的即使到了后期也是可以快速做的。
美术资源
资源分级
如 贴图png/jpg的选择 动画30帧还是60帧的选择 粒子质量高或低还是标准 等。根据不同场合使用不同级别资源。一般来说高质量资源只会出现在最显眼的地方 如 登陆,人物选择,入场。真正战斗调用的美术资源往往只需要普通品质即可。具体项目可以跟着需求来控制,划重点 这里要做差异化 才能省出资源(内存)。
贴图的质量选择
贴图的质量选择主要影响运行时效率,并不影响出包的大小。UNITY3D打包会自己优化图片大小,如果你使用了android studio release 打包,大小会进一步压缩。
这里可以想象一下内存与效率的转化。内存占比越高越清晰。这个可以直接通过贴图的前缀或者后缀统一设置。或者写一个资源管理工具 统一设置。
冷热分离 延迟加载
- 使用延迟加载,如果需要集中加载某些资源可以考虑冷热分离。常驻内存中的资源 与 非常驻内存中的资源采取不同策略:
战斗配置 等到战斗场景再加载,关卡/任务/成就/ 等等其他 可以等到打开具体面板或进入场景的时候做一次缓存。 - 移除空函数 如 继承自MB的 Update 之类的函数。
- 分帧做iO 或 网络请求的操作。再具体一点就是用携程 该return的地方就return 等候下一帧处理。
- 高消耗的函数避免甚至不用 基本上UNITY API中以Findxxx开头 返回一个 List 的函数都是高消耗函数。
内存控制
- 使用缓存池 如 通用面板/通用弹出美术字(战斗中伤害数字)/ 等考虑缓存。
- 监测当前工程在移动端的内存占用,给所有的缓存池增加释放接口 做一些排序释放操作(优先级释放)。
可以参考 UNITY5.6 的新API Application.lowMemory - 使用压缩过的音频 或者 使用 Fmod 之类的插件进行托管。缺氧使用的就是 fmod .
- 文本配置转2进制存储 减少运行时内存占用。
效率重点
- 使用 line fog 调整相机视野
- 关闭场景阴影 能用烘焙用烘焙。
- 使用 Fast Shadow Projector 做阴影。
- 不要使用standard shader。因为大量的实时GI运算。
打包事项
- iOS 如果可以就使用 bit code
- APK 使用 Android Studio release 打包
- 使用
.NET 2.0 Subset
使用脚本代替如 xml 之类的system库的使用。 - 打包完之后查看 log 确定资源瓶颈。推荐使用
Build Report Tool
某宝五毛钱能买到最新版。每次打包都需要看一眼,真等到需要做优化的时候已经晚了,优化的需求往往是积累到一定程度才爆发需要优化。 - 打包过atlas的图就不要再放到Resources下,方便的话就打包成AB
一些具体的优化资料
本文标题:UNITY性能优化参考篇
文章作者:Keyle
发布时间:2018-03-09
最后更新:2024-08-20
原始链接:https://vrast.cn/posts/69247612/
版权声明:©Keyle's Blog. 本站采用署名-非商业性使用-相同方式共享 4.0 国际进行许可