Coroutine 深入理解

coroutine这个功能是unity非常好用的功能,能解决类似线程的一些问题,而且不用考虑lock 和 同步的问题,所以必须深入掌握coroutine的功能。

coroutine的使用场景
等待多久做某件事
等待某件事结束再做后续的事  tips:使用while(条件巧妙的做到)
coroutine不是线程,不会在unity中并行处理
这点必须了解清楚,很多同学会在这里迷糊,其实这个功能只是c#
的yield的功劳。coroutine的调用仍然会在unity 主线程中调用。
简单写个测试用例就知道了。

public class NewBehaviourScript : MonoBehaviour {
void Start () {
    StartCoroutine(Test());
    Debug.Log("after coroutine");
}
IEnumerator Test(){
    for(int i=0; i<1000; i++){
        Debug.Log(i);
    }
    yield return null;
    Debug.Log("end test");
}
}
打印结果顺序:#)打印1000次i的信息 --> after coroutine -->end test
从结果我们可以看到: courtine的却是一个单线程的,不然的话after coroutine的打印
是不会等到程序遇到yield关键字暂停后继续进行的。所以之前的unity并行处理的理解
是错误的,或者给你造成了假象。
coroutine的调用时机
5555.png
看下unity的官方的coroutine的流程图就可以明白了。croutine一般情况是在
update 后执行的。当然unity 也提供了WaitForEndOfFrame 这种的功能。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、运行时数据区域 Java虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、本地方法栈、堆、程序计数器,...
    加油小杜阅读 1,534评论 1 15
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,989评论 25 708
  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 13,169评论 3 90
  • 从有想法到做出决定,再推翻,再决定,直到做出行动,需要多长时间? 这件事情我已经反复搞了一年,现在是否真的到了做出...
    爱生活挺自己阅读 347评论 0 0
  • 雁过留声,人过留迹;他只是我生命中的过客,却让我总是想起。 第一次见面时,枯黄瘦弱的面颊,有些焦灼的马尾,微微干裂...
    枫叶子阅读 471评论 0 1