避免装箱拆箱
所谓装箱就是把值类型变成引用类型,比较隐蔽的情况是:把值类型作为Object类型参数的时候,或者返回一个object对象的时候。
第一种:
1 | Debug.Log(string.Format("content: {0}", 1)); |
非装箱版本:
1 | Debug.Log(string.Format("content: {0}", 1.ToString())); |
第二种。众所周知,协程IEnumerator返回的类型是object。当我们想跳过当前帧的时候有三种方式:
1 | yield return null; |
在这上面三种方法中,第一种为最佳。这是因为第二种需要把0装箱成一个Object,而第三种则需要new一个新对象。如果这个协程经常被调用(每帧),应该选择返回null。
避免高消耗API的频繁调用
包括:
GameObject.GetComponent<T>
GameObject.transform
GameObject.rigidBody
UnityEngine.Object == null
可以使用Assert来代替
提取常用的局部变量为成员变量
反例
1 | class Test : MonoBehaviour |
改进
1 | class Test : MonoBehaviour |
提取常使用的不变对象为静态常量
假设我们每帧需要对画笔对象设置颜色,而当前情况中需要每帧都设置为白色,比较高消耗的写法为:
1 | void Update() |
改进的情况下,我们新建一个PaintColor的类,设置好几种颜色,外面直接用,不需要每次都new。
1 | public class PaintColor |
同理,应当多多使用unity提供给我们的静态常量如Vector.zero,而尽量避免自己new一个Vector(0,0,0)。
string操作
避免使用string +操作,多多使用string.format和StringBuilder.Append()。