Tốc độ (nhanh đến chậm):
cached _transform >> Component.transform >> Component.GetComponent<Transform>
Và nếu bạn tháo rời nhị phân UnityEngine.dll C #, bạn có thể thấy biến đổi không gọi GetComponent (thành viên lớp Thành phần), chỉ cần gọi phương thức thời gian chạy đơn nội bộ. Đây là mã biến đổi.
// UnityEngine.Component
public Transform transform
{
get
{
return this.InternalGetTransform();
}
}
[WrapperlessIcall]
[MethodImpl(MethodImplOptions.InternalCall)]
internal extern Transform InternalGetTransform();
Và đây là Phương thức GetComponent của lớp Thành phần được phân tách.
public extern Component GetComponent(Type type);
public T GetComponent<T>() where T : Component
{
return this.GetComponent(typeof(T)) as T;
}
[WrapperlessIcall]
[MethodImpl(MethodImplOptions.InternalCall)]
public extern Component[] GetComponents(Type type);
GetComponent là một loại chức năng Tìm kiếm bằng cách sử dụng thuốc generic. Vì vậy, nó chậm hơn một chút so với bộ nhớ đệm.
Nguồn chính thức :
public class Test : MonoBehaviour
{
Transform _transform;
void Start()
{
_transform = this.transform;
_transform = gameObject.GetComponent<Transform>();
}
}
Nhị phân nhị phân:
public class Test : MonoBehaviour
{
private Transform _transform;
private void Start()
{
// == UnityEngine.Component::get_transform()
this._transform = base.get_transform();
// == UnityEngine.Component::GetComponent<UnityEngine.Transform>()
this._transform = base.get_gameObject().GetComponent<Transform>();
}
}