Unity中GetComponent的三个方法
- GetComponent< T >()
- GetComponent(string type)
- GetComponent(Type type)
我们来测试一下:
新建一个脚本,代码如下:
public class TestGetComponent : MonoBehaviour
{
const int numberOfCalls = 5000;
Transform trans;
void PerformGetComponent1()
{
for (int i = 0; i < numberOfCalls; i++)
{
trans = GetComponent<Transform>();
}
}
void PerformGetComponent2()
{
for (int i = 0; i < numberOfCalls; i++)
{
trans = (Transform)GetComponent("Transform");
}
}
void PerformGetComponent3()
{
for (int i = 0; i < numberOfCalls; i++)
{
trans = (Transform)GetComponent(typeof(Transform));
}
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
PerformGetComponent1();
PerformGetComponent2();
PerformGetComponent3();
}
}
}
新建一个空场景,然后将脚本挂载到一个GameObject上,运行,打开Profiler查看:
我们看到:
- PerformGetComponent3()方法,耗时最长,用了2.23毫秒
- PerformGetComponent1()方法,耗时1.93毫秒
- PerformGetComponent2()方法,耗时1.30毫秒
总结
在Unity中GetComponent的三个方法中:
- GetComponent(string type) 效率最高
- GetComponent< T >() 次之
- GetComponent(Type type)效率最低
注意:不同Unity版本,测试会有不同,当前测试使用的Unit版本是2020.2.2f1
你在实际开发中经常使用哪个方法呢?