【Unity3D】协程——协程的执行原理 764424567

协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。 Unity在每一帧(Frame)都会去处理对象上的协程。Unity主要是在Update后去处理协程(检查协程的条件是否满足) 协程跟Update()其实一样的,都是Unity每帧对会去处理的函数(如果有的话),至少是每帧的LateUpdate()后去运行。

详细见下图: 这里写图片描述

###Unity生命周期流程图

另外对协程的停止还有一个方法: 通过设置MonoBehaviour脚本的enabled对协程是没有影响的,但如果gameObject.SetActive(false) 则已经启动的协程则完全停止了,即使在Inspector把gameObject 激活还是没有继续执行。也就说协程虽然是在MonoBehvaviour启动的(StartCoroutine)但是协程函数的地位完全是跟MonoBehaviour是一个层次的,不受MonoBehaviour的状态影响,但跟MonoBehaviour脚本一样受gameObject 控制,也应该是和MonoBehaviour脚本一样每帧“轮询” yield 的条件是否满足。

yield 后面可以有的表达式:

   1. null 、0或者未知数值-等待下一帧执行。
   2. WaitForEndOfFrame - 等待渲染周期循环和GUI完成后执行。
   3. WaitForFixedUpdate - 等待物理周期循环完成后执行
   4. WaitForSeconds - 等待给定的时间周期过完后执行
   5. WWW - 等待www的网络请求完成后,isDone=true后执行。
   6. Another coroutine - in which case the new coroutine will run to completion before the yielder is resumed 值得注意的是 WaitForSeconds()受Time.timeScale影响,当Time.timeScale = 0f 时,yield return new WaitForSecond(x) 将不会满足。
764424567wechat 764424567qq 764424567alipay