Unity的项目优化已经是老生常谈,很多人在项目完成之后,即便创意新颖,也会觉得差强人意,原因就在于没有做详细的项目优化。众所周知,Unity是一个综合性的3D开发引擎,其中包含图像渲染,逻辑处理,数据存储,发布测试等等各方面的内容。因此Unity各个方面都存在的待优化的内容,也可以说项目优化是项目开发中必不可少的一项工作。本篇文章会从项目的各个方面分析Unity待优化的内容,并给出优化方案,全面优化你的项目。优化项目无非是减轻系统的功耗负担,故下面从CPU、GPU、内存三方面的优化来讲解
CPU优化
DrawCalls
什么是DrawCall?
Unity每次在准备数据并通知GPU渲染的过程称为一次DrawCall。
为什么要优化DrawCall?
因为通知给GPU这个工作是由CPU来完成的,
完成每一次DrawCall都需要CPU完成很多的内容,
因此如果DrawCall很多的话CPU一定是不堪重负。
但对于GPU而言,很多的工作都是一样的,
也就是说很多的DrawCall是没有意义的,
可以理解为很多次的DrawCall都可以合并为一次,
这样减轻了CPU的负担,
同样也可以通知GPU完成相应的工作。
因此减少DrawCall成了优化CPU的第一要务。
- 降低DrawCall第一步-->Draw Call Batching(批处理)
两个或多个纹理相同或材质相同的网格模型可以批量处理他们的材质,这样就可以将多个模型的材质DrawCall合并为一个,从而达到减少DrawCall的目的。批处理是系统工作范畴,我们只需要选择即可,批处理又分为静态批处理和动态批处理。
- Static Batching 静态批处理
场景中有很多游戏对象,其中静态对象(Inspector勾选Static的)可以通过静态批处理来优化DrawCall。
此时,DrawCall变为1,Saved by batching变为3。
当然,目前我们只有四个对象,如果在项目中超多的相同材质静态对象或相同纹理的静态对象,DrawCall减少量更大,优化做的也就会更好。
- Dynamic Batching 动态批处理