在 Unity中选择正确的脚本优化比漫无目的地调整代码更能提高代码的执行效率。值得注意的是:最好的优化并不是简单地降低代码的复杂度。
1.在使用FixedUpdate函数时,在方法体内尽量不要写太多无须重复调用的代码,因为虚拟机在执行该方法时是以每秒50-100次的执行效率来处理每个脚本与对象的。当然,执行效率是可以改变的。依次打开菜单栏中的Edit->ProjectSettings->Time项,进而可以在Inspector视图中显示TimeManager属相面板。
FixedUpdate与Update的区别:Update会在每次渲染新的一帧时执行,它会受当前渲染物体的影响,渲染的帧率是变化的,所以渲染时间间隔也会变化,也就是说Updata更新频率和设备的性能有关;而FixedUpdate不受帧率的影响,它是以固定时间间隔被调用的。所以在用法的处理上,FixedUpdate更多地用于处理物理引擎。Update因为受渲染物体的影响,所以更多地把Update用于脚本逻辑的控制。
2.一般在新建类时会产生新的Update函数。如果代码不需要用到该函数,应该对该函数进行删除。另外,尽量不要在Update函数内执行Find,FindObjectOfType,FindGameObjectsWithTag这些寻找物体的函数,而应该尽量在Start或Awake函数中执行。
3.引用一个游戏对象的逻辑,可以在最开始的地方定义它。例如:
private Transform myTransform;
private Rigidbody myRigidbody;
void Start () {
myTransform = transform;
myRigidbody = rigidbody;
}
4.当一个程序不必要每帧都执行时,可以使用Coroutines。定时重复调用可以使用InvokeRepeating函数实现。例如,启动1.5秒后每隔1秒执行一次DoSomeThing函数。
void Start() {
InvokeRepeating("DoSomeTing", 1.5f, 1.0f);
{
5.尽量减少使用临时变量,特别是在Update等实时调用的函数中。
6.在游戏暂停,场景切换时,可以主动进行垃圾回收,从而及时去除游戏中已经不必要地内存占用。
Void Update() {
if(Time.frameCount%50 == 0) {
System.GC.Collection();
}
}