上一篇中的对比,由于对transform.position进行了操作,因此相对耗时也比较长。
这里只在Update中进行运算,不进行transform和gameObject方面的设置进行了对比。
即:对比多个Monobehavior.Update和一个Monobehavior在Update中循环调用类的Update.
代码修改
在Update的中,不进行transform相关的修改,只计算一下。
TestMonoUpdate:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21using UnityEngine;
namespace Yanchezuo
{
public class TestMonoUpdate : MonoBehaviour
{
private Vector3 pos;
private Transform _trans;
public void Start ()
{
_trans = this.transform;
}
private void Update()
{
int x = Random.Range(0, Screen.width);
int y = Random.Range(0, Screen.height);
pos = new Vector3(x, y, 0);
// _trans.position = new Vector3(x,y,0);
}
}
}
TestScriptUpdate:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21using UnityEngine;
using System.Collections;
namespace Yanchezuo
{
public class TestScriptUpdate
{
private Transform _trans;
private Vector3 pos;
public void Start(GameObject go)
{
_trans = go.transform;
}
public void Update()
{
int x = Random.Range(0, Screen.width);
int y = Random.Range(0, Screen.height);
pos = new Vector3(x, y, 0);
// _trans.position = new Vector3(x,y,0);
}
}
}
实验结果
生成10k个GameObject,每个GameObject上挂1个TestMonoUpdate脚本,7.16ms:
生成10k个GameObject,每个GameObject上挂4个TestMonoUpdate脚本,6.49ms:
生成10k个GameObject,每个GameObject上挂10个TestMonoUpdate脚本:6.30ms:
生成10k个GameObject,和10k个TestScriptUpdate类,每个类管理一个GameObject.(GameObject貌似没有什么用了,因为没有用到…)
只用了3.05ms!!
总结
- 明显使用多个脚本Update要优于多个Monobehavior.Update。
- 一个GameObject上挂多个Monobehavior.Update要好于直挂一个。但是,上限差不多是10吧。测试过挂20个,和10个效果基本一样。
- 关于Transform方面的计算,运算复杂程度还是挺高的。比如,设置了transform.position和不设置,10k次运行时间分别是16.64ms和7.16ms