Unity协程
yield return null
暂停一帧yield return new WaitForSeconds(1.0f)
暂停一秒yield return StartCoroutine()
等这个新协程结束yield return new WaitForEndOfFrame()
等待到帧的末尾- MonoBehaviour被Disable的时候协程会继续执行
- 在协程执行耗时操作会阻塞主线程,因为本质上协程也是游戏主循环的一部分,游戏主循环是单线程运行的
- 在耗时算法中拆几个
yield return null
分到几帧去执行 - 如果没有使用Unity API(其他线程不可以访问Unity API),在异步线程执行操作
- 在耗时算法中拆几个
- 协程的本质是一个能暂停返回的函数,协程调度是实现在MonoBehaviour的生命周期中的,协程本身的原理用的是C#迭代器方法
- Unity的协程只允许返回继承自
YieldInstruction
的对象或者null
,返回其他对象当做null处理
C#的迭代器方法
- 返回值要求返回IEnumerator,调用时返回一个迭代器,调用MoveNext执行到yield返回一次
- 调用Current返回当前的返回值
IEnumerator<T>
只能返回T类型的对象