• unity 协程


    StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程。

    在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的。这个时候可以使用协程来完成。

    使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况。

    下面通过一个简单的例子来说明使用协程的好处:

    void OnGUI()  
        {  
            GUI.Label(new Rect(0, 0, 200, 50), "测试1:" + result);  
            if (GUI.Button(new Rect(0, 100, 100, 50), "开启协程"))  
            {  
                StartCoroutine(GetResult());  
            }  
      
            GUI.Label(new Rect(200, 0, 200, 50), "测试2:" + result1);  
            if (GUI.Button(new Rect(200, 100, 100, 50), "无协程测试"))  
            {  
                GetResult1();  
            }  
        }  
    
    

    上面的代码表示在GUI中定义2个label和按钮,一个按钮启动协程计算,另一个直接计算结果。由于2个方法都是计算同样的结果,计算量比较大,所以直接计算出现了暂时的卡死情况。

    float result;  
        IEnumerator GetResult()  
        {  
            for (int i = 0; i < 1000; i++)  
            {  
                for (int j = 0; j < 100000; j++)  
                {  
                    result += (i + j);  
                      
                }  
                if(i%100==0)  
                    yield return 1;  
                  
            }  
        }  
    
    

    这个方法是协程的写法,在C#中协程要定义为IEnumerator 这个类型,javascript中不需要。

    yield return 1;这句话表示返回1帧的结果。在i为100的整数时,就返回一次结果,这样可以避免大量的计算卡死。

    float result1;  
        void GetResult1()  
        {  
            for (int i = 0; i < 1000; i++)  
            {  
                for (int j = 0; j < 100000; j++)  
                {  
                    result1 += (i + j);  
                }  
            }  
        }  
    

    这个方法就是直接计算结果,由于运算量比较大,所以界面会卡死,这样就可以体现出用协程的好处了。
    使用IEnumerator 这个类型时,必须用yield return来返回结果,参数为数字时表示为帧数。
    如yield return 1 表示每一帧返回一次结果。

  • 相关阅读:
    XML
    DAO
    JDBC
    事物、视图、索引、备份和恢复
    用户
    高级查询2
    高级查询1
    数据库设计
    初识MySQL
    古代和现在的区别Hashtable和HashMap
  • 原文地址:https://www.cnblogs.com/yufenghou/p/6107292.html
Copyright © 2020-2023  润新知