StartCoroutine的使用
来源:互联网 发布:网络捕鱼游戏平台 编辑:程序博客网 时间:2024/04/28 15:51
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 表示每一帧返回一次结果。
0 0
- StartCoroutine的使用
- 关于StartCoroutine的简单线程使用
- 关于StartCoroutine的简单线程使用
- 关于StartCoroutine的简单线程使用
- unity关于StartCoroutine的简单线程使用
- 关于StartCoroutine的简单线程使用
- 关于StartCoroutine的简单线程使用
- unity使用StartCoroutine是提示NullReferenceException的解决方法
- 只谈 Unity中 yield return/ StartCoroutine 的使用
- StartCoroutine的学习记录
- StartCoroutine
- Unity Button监听onclick在StartCoroutine()中的使用
- unity3d .SendMessage() , Start(),StartCoroutine()的先后顺序问题
- 在Unity中StartCoroutine/yield return的原理和模式
- MonoBehaviour.StartCoroutine
- IEnumerator 、StartCoroutine
- StartCoroutine,Instantiate
- unity StartCoroutine
- Android AsyncTask完全解析,带你从源码的角度彻底理解
- [Leetcode] Populating Next Right Pointers in Each Node II
- 百度为什么要有这个点击原理呢
- ural 1306. Sequence Median(优先队列)
- 详解MySQL中EXPLAIN解释命令
- StartCoroutine的使用
- LevelDB源码阅读(1)—— SSTable的生成
- TWiki安装和使用心得
- 从用户体验的6大点来分析优化
- ubuntu14.04 编译安装highpoint rocketraid 2720驱动
- REST风格的软件架构
- 垃圾链接的形式和预防常规做法
- MongoDB资料汇总专题
- UVA 10534 - Wavio Sequence(自写set<node>优化o(n^2)dp)