博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于StartCoroutine的简单线程使用
阅读量:6983 次
发布时间:2019-06-27

本文共 1152 字,大约阅读时间需要 3 分钟。

 

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

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

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

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

 

 

[csharp] 
 
  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和按钮,一个按钮启动协程计算,另一个直接计算结果。由于2个方法都是计算同样的结果,计算量比较大,所以直接计算出现了暂时的卡死情况。

 

[csharp] 
 
  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] 
 
  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 表示每一帧返回一次结果。

转载于:https://www.cnblogs.com/zhusd/p/3868381.html

你可能感兴趣的文章
高中时的口头禅
查看>>
C++ 虚函数表解析
查看>>
[SCOI2009]windy数
查看>>
Struts2--Action属性接收参数
查看>>
2012年科技新闻背后的大数字
查看>>
报价单内,同一物料只允许一条行价格记录
查看>>
leetcode 283. Move Zeroes
查看>>
自己的php函数库
查看>>
HDU Problem 1599 find the mincost route 【Floyd求最小环】
查看>>
HDU2017多校联合 contest 1
查看>>
基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理(转载自:http://www.cnblogs.com/wuhuacong/p/4175266.html)...
查看>>
range
查看>>
[Noi2002]Savage 题解
查看>>
特征选择, 经典三刀(转)
查看>>
【Python3爬虫】自动查询天气并实现语音播报
查看>>
新的公司
查看>>
【JavaScript】02.基础语法学习
查看>>
自行学习XAML控件后的简单想法(作业一)
查看>>
python3 集合中的常用方法
查看>>
ECSHOP生成缩略图模糊
查看>>