内存优化方面

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如下图所示:

unity魂斗罗素材 unity魂斗罗教程_第三方库

打包方式2如下图所示:

unity魂斗罗素材 unity魂斗罗教程_Unity性能优化_02

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