CPU方面的优化
1.DrawCall
CPU调用底层图形接口。
(1)使用Draw Call Batching,描绘调用批处理。Unity 3D在运行时可以将一些物体进行合并,从而用一个描绘调用他们。
(2)通过把纹理打包成图集尽量减少材质的使用。
(3)尽量少的使用反光、阴影之类的效果,因为那会使物体多次渲染。
Static Batching静态批处理
定义:只要这些物体不移动,并且拥有相同的材质,静态批处理就允许引擎对任意大小的几何物体进行批处理操作来降低描绘调用。
在游戏中物体永远不会移动、旋转和缩放,即可视为静止的。在检测器(Inspector)中勾选对象的“Static”复选框即可。
Dynamic Batching动态批处理
2.GC
GC虽然能释放内存,但会加重CPU的负担,因此尽量少的出发GC。
(1)字符串连接
(2)尽量不要使用foreach语句,而是使用for语句。
(3)不要直接访问gameobject的tag属性。不如“if(go.tag == "fish")”最好换成“if(go.CompareTag("fish")”。
(4)使用“对象池”,以实现空间的重复利用。每次实例化都会不停的消耗内存。
3.代码
(1)以物体的Transform组件为例,我们应该只访问一次,之后将其引用保留,而非每次使用都去访问。对比GetComponent<Transform>()和MonoBehavor获取transform所需时间,显示:
a.GetComponent=619ms。
a.MonoBehavor=60ms。
a.CachedMB=8ms。
a.Manual Cache=3ms。
(2)最好不要频繁使用GetComponent,尤其在循环中。
(3)善于使用OnBecameVisible()和OnBecameInvisible()来控制物体的update()函数的执行以减少开销。
void OnBecameVisible()//当对象进入屏幕中
{
}
(4)使用内建的数组。比如用Vector3.zero而不是new Vector3(0,0,0)。
(5)对于方法的参数的优化,善于使用ref关键字。