为什么缓存GameObject更快?

时间:2016-11-28 13:42:40

标签: unity3d

private GameObject mGo;

void Start()
{
    this.mGo = this.gameObject;
}


void OnGUI()
{
    if (GUILayout.Button("T1"))
    {
        float time = Time.realtimeSinceStartup;
        int s = 0;
        for (int i = 0; i < 100000; i++)
        {
            s = this.gameObject.layer;
        }

        Debug.Log("T1:" + (Time.realtimeSinceStartup - time));
    }

    if (GUILayout.Button("T2"))
    {
        float time = Time.realtimeSinceStartup;
        int s = 0;
        for (int i = 0; i < 100000; i++)
        {
            s = this.mGo.layer;
        }
        Debug.Log("T2:" + (Time.realtimeSinceStartup - time));
    }
}

这是一个简单的演示。 我正在阅读其他源代码,然后找到这个。 我想知道为什么T1和T2不同? 有人可以告诉我原因。

1 个答案:

答案 0 :(得分:3)

this.gameObject是一个属性

   public GameObject gameObject { get;} 

所以这是一种方法和方法在它们的使用中增加了一些开销。 首先,程序需要存储当前索引,然后跳转到方法位置,将参数堆叠在堆栈上并运行方法中的代码。然后它执行返回到它停止的程序的反转效果。

除此之外,酒店可能还有一些额外的支票。

使用缓存版本意味着您正在使用直接访问的引用。