我们来测试一下:
新建一个脚本,代码如下:
using UnityEngine;
public class TestGetComponent : MonoBehaviour
{
const int numberOfCalls = 5000;
Transform trans;
void PerformGetTransform1()
{
for (int i = 0; i < numberOfCalls; i++)
{
trans = (Transform)GetComponent("Transform");
}
}
void PerformGetTransform2()
{
for (int i = 0; i < numberOfCalls; i++)
{
trans = GetComponent("Transform").transform;
}
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
PerformGetTransform1();
PerformGetTransform2();
}
}
}
新建一个空场景,然后将脚本挂载到一个GameObject上,运行,打开Profiler查看:
我们看到:
- PerformGetTransform2() 方法耗时1.82毫秒
- PerformGetTransform1() 方法耗时1.27毫秒
其中,PerformGetTransform2() 中,耗时的地方是:调用了5000次Component.get_transform()方法
所以,在获取Transform的时候,使用强制类型转换更有效率。
总结
通过GetComponent(“Transform”).transform获取Transform效率并不高,使用强制类型转换(Transform)GetComponent(“Transform”) 效率更高。