“最优化”:尽可能地,让你的游戏在多个平台上都表现出好的运行效果。
推荐开发者最好在开始开发游戏的时候就把最优化的因素考虑在内,即使在编写代码前,导入资源前,甚至是制作资源,之前就考虑不为过。
- 渐少顶点的数目
在不影响效果的情况下尽量减少游戏场景中对象的顶点数。(游戏视图stats面板中可看到顶点数目的统计) - 减少材质
减少绘制调用(draw call),因为一次绘制调用可以批量处理同材质的游戏对象,对于不同材质的对象,只能使用多次调用。 - 减少UV接缝
一个顶点会负责一个面的UV接缝,而这直接导致了网络对象顶点数的增加。 - 不同平台下,纹理的设置不同
在不同的游戏平台上可以设置不同的纹理大小和压缩格式:
平台 | 格式 |
在Android平台 | 建议选择RGB ETC格式 |
在iPhone平台 | 建议选择RGB PVPTC格式 |
- 对象缓存组件
当使用Unity API时,最常用的C#语句是this.transform或transform。这条语句可以直接访问C#的属性,然后返回transform组件的应用。下面的代码,演示了对象缓存的生产和使用:
void Awake()
{
//变量存储了transform组件的引用
MyTransform = transform;
}
void Update()
{
//通过变量改变对象的位置
MyTransform.LocalPosition = MyPosition;
}
- 避免频繁使用Update()函数
Update()在每帧都会被多次调用,1111还有LateUpdate()和fixedUpate()。总之,尽可能编写事件驱动(Event-Driven)的代码,而不是帧驱动(Frame-Driven)。 - 合理使用Collider组件
许多游戏对象,在默认情况下被赋予了Collider组件,但有些游戏对象使用Collider组件完全没有必要。例如,GUI对象,粒子以及其他一些根本不会与游戏角色相交的游戏对象。 - 避免使用OnGUI()和GUI类
OnGUI()在每帧都会被多次调用,所以最好不要将游戏的逻辑和功能代码放在这个函数里,而只让函数唯一处理GUI绘制。 - 使用静态批处理
有些游戏对象在整个游戏过程中都不会发生移动,那么最好在查看器中将它们标记为静态的(static)。 - 使用天空盒子
天空盒子类似于模拟摄像机视图的远景,而摄像机本身处于天空盒子的内部的,而不使用网络对象以及其他的任何对象。