Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 为什么缓存游戏对象更快? 私有游戏对象mGo; void Start() { this.mGo=this.gameObject; } void OnGUI() { if(GUILayout.按钮(“T1”)) { 浮动时间=time.realtimeSinceStartup; int s=0; 对于(int i=0;i_Unity3d - Fatal编程技术网

Unity3d 为什么缓存游戏对象更快? 私有游戏对象mGo; void Start() { this.mGo=this.gameObject; } void OnGUI() { if(GUILayout.按钮(“T1”)) { 浮动时间=time.realtimeSinceStartup; int s=0; 对于(int i=0;i

Unity3d 为什么缓存游戏对象更快? 私有游戏对象mGo; void Start() { this.mGo=this.gameObject; } void OnGUI() { if(GUILayout.按钮(“T1”)) { 浮动时间=time.realtimeSinceStartup; int s=0; 对于(int i=0;i,unity3d,Unity3d,这是一个简单的演示。 我正在阅读其他源代码,然后找到这个。 我想知道为什么T1和T2不同? 有人可以告诉我原因。this.gameObject是一个属性 private GameObject mGo; void Start() { this.mGo = this.gameObject; } void OnGUI() { if (GUILayout.Button("T1")) { float time = Time.realtimeSinceStart

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

this.gameObject是一个属性

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));
    }
}
因此,这是一种方法,在使用方法时会增加一些开销。 首先,程序需要存储当前索引,然后跳转到方法位置,将参数堆在堆栈上并在方法中运行代码。然后,它会产生相反的效果,返回到它停止的程序

除此之外,可能还有一些额外的检查在财产


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

this.gameObject是一个属性

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));
    }
}
因此,这是一种方法,在使用方法时会增加一些开销。 首先,程序需要存储当前索引,然后跳转到方法位置,将参数堆在堆栈上并在方法中运行代码。然后,它会产生相反的效果,返回到它停止的程序

除此之外,可能还有一些额外的检查在财产


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

这是一个糟糕的基准,不可靠。无论如何,该属性可能有副作用。请注意,您不应该在游戏中使用
OnGUI
进行开发。只有在为编辑器设计控件时才应该使用该函数。这是一个糟糕的基准测试,不可靠。无论如何,该属性可能有副作用。请注意,您不应该在游戏中使用
OnGUI
进行开发。只有在为编辑器设计控件时,才应使用该函数。