内存优化方面
1、资源优化
贴图:贴图压缩成ETC/PVRTC格式;带alpha通道的贴图进行alpha拆分,之后分别压缩
模型:网格精度压缩、临近的顶点进行删减
动画:临近的一些关键帧进行去除;删除一些冗余的关键帧;
声音:压缩成OGG格式
粒子:少用粒子,每一个粒子大约占用10k的内存;
Shader:预编译的宏;减少从其他处得到的Shader的无用代码
脚本和配置:及时卸载
2、引擎层面占用
AB层面占用:
1)规划好公共资源,管理好依赖
2)打包策略
2.1)自动查找依赖关系
2.2)凡是公共依赖,就打成公共ab
3)合包策略
3.1)为减少IO,同一层级ab进行合包
3.2)控制合包尺寸,防止ab被意外删除,10M以内比较安全
3.3)控制同一个ab包中最大资源数量
打包方式1如下图所示:
打包方式2如下图所示:
MONO堆:
1)常驻
Static、Singleton
细碎、分散
影响项目的延展性
和整为零,从全局进行分析
数据采集工具:https://wetest.qq.com/product/cube/
分析思路的一些参考:http://gad.qq.com/article/detail/20966
2)瞬时分配
更加细碎、分散
内存碎片
GC频率
通过Unity-Profile耐心排查
避免使用foreach、避免一些常规的装箱拆箱操作
3、其他
1)场景临时内存
UI Mesh 控制UI复杂度
Particle Instance 使用obj pool 规划并减少particle实例的峰值
Batched Mesh 美术线下进行合批操作
2)第三方库
库使用的内存难以监控
Lazy加载第三方库
通过划分系统架构来排查第三方库的内存使用
3)内存泄漏
http://gad.qq.com/article/detail/20966
CPU优化方面
波动的、变化的,波峰稍纵即逝
削峰填谷,充分利用CPU
优化颗粒度、降低/均摊密度
微观角度:在每一帧找到问题
宏观角度:从统计数据中发现问题
1)节流
GC、GC Alloc
渲染
逻辑
其他引擎的消耗(动画、物理)
UI动静分离,分帧处理
不可能做到彻底的分离,否则层级结构会被破坏,UI制作变得抽象且不容易管理
通过减少rebuild次数来控制动态元素的影响
避免SetActive
添加Panel
带来负面影响,DrawCall增多
2)开源
多线程(多线程计算、多线程加载)
GPU(将一些工作放到GPU中处理)
附:PPT下载地址 http://url.cn/52sTGh7