zoukankan      html  css  js  c++  java
  • StartCoroutine的使用

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

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

    使用线程的优点就是不会出现界面卡死的情况。假设有一次很大量的运算。没用线程就会出现假死的情况。

    以下通过一个简单的样例来说明使用协程的优点:

    [csharp] view plaincopy
     
    1. void OnGUI()  
    2.     {  
    3.         GUI.Label(new Rect(0, 0, 200, 50), "測试1:" + result);  
    4.         if (GUI.Button(new Rect(0, 100, 100, 50), "开启协程"))  
    5.         {  
    6.             StartCoroutine(GetResult());  
    7.         }  
    8.   
    9.         GUI.Label(new Rect(200, 0, 200, 50), "測试2:" + result1);  
    10.         if (GUI.Button(new Rect(200, 100, 100, 50), "无协程測试"))  
    11.         {  
    12.             GetResult1();  
    13.         }  
    14.     }  

    上面的代码表示在GUI中定义2个label和button,一个button启动协程计算,还有一个直接计算结果。

    因为2个方法都是计算相同的结果,计算量比較大。所以直接计算出现了临时的卡死情况。

     

    [csharp] view plaincopy
     
    1. float result;  
    2.     IEnumerator GetResult()  
    3.     {  
    4.         for (int i = 0; i < 1000; i++)  
    5.         {  
    6.             for (int j = 0; j < 100000; j++)  
    7.             {  
    8.                 result += (i + j);  
    9.                   
    10.             }  
    11.             if(i%100==0)  
    12.                 yield return 1;  
    13.               
    14.         }  
    15.     }  

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


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

    [csharp] view plaincopy
     
    1. float result1;  
    2.     void GetResult1()  
    3.     {  
    4.         for (int i = 0; i < 1000; i++)  
    5.         {  
    6.             for (int j = 0; j < 100000; j++)  
    7.             {  
    8.                 result1 += (i + j);  
    9.             }  
    10.         }  
    11.     }  

    这种方法就是直接计算结果,因为运算量比較大。所以界面会卡死,这样就能够体现出用协程的优点了。


    使用IEnumerator 这个类型时。必须用yield return来返回结果,參数为数字时表示为帧数。


    如yield return 1 表示每一帧返回一次结果。

  • 相关阅读:
    0015 Java学习笔记-集合-TreeMap集合
    0014 Java学习笔记-集合-HashMap集合
    0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
    0012 win7x64安装CentOS7
    0011《SQL必知必会》笔记07 数据的插入、更新和删除
    0010《SQL必知必会》笔记06-表的修改与删除
    0009《SQL必知必会》笔记05-表的创建与约束
    0008《SQL必知必会》笔记04-子查询、联接与组合查询
    0007《SQL必知必会》笔记03-汇总与分组数据
    0006 《SQL必知必会》笔记02-计算字段与函数
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5139390.html
Copyright © 2011-2022 走看看