Unity Coroutine 简单理解

协程的定义:

IEnumerator MyCoroutine () {
    yield return new WaitForSeconds(1.0f);
    doSomething();
}

启动协程:

StartCoroutine(MyCoroutine ())

解析:

协程一旦启动后,就像 Update 函数一样,每帧执行

yield return 的作用就是返回 IEnumerator 对象,当该 IEnumerator 对象 (在上面的示例中就是 new WaitForSeconds(1.0f) )的 MoveNext 返回 false 时,即该 IEnumerator 迭代到最后一个元素,才会执行后面的 doSomething 语句

总结一下,实际上就是协程启动后,判断 yield return 是否返回 false ,如果不是则 MoveNext 下一帧再判断,直到 return false 则执行后面的语句

在 update 中启动协程

void Update ()
{
    StartCoroutine(MyCoroutine ())
}

在每帧 Time.deltaTime 都开启一个 MyCoroutine 协程,每个协程延迟1秒后执行,换句话说 MyCoroutine 函数将在1秒后按 Time.deltaTime 的间隔时间陆续执行,在这里,与调用普通函数相比效果仅仅是延迟1秒后开始执行

使用协程模拟一个 FixedUpdate

IEnumerator MyUpdate() {
    while(true)
    {
        yield return new WaitForSeconds(0.02f);
        doSomething();
    }
}

void Start()
{
    StartCoroutine(MyUpdate());
}
每间隔 0.02 秒执行一次 doSomething 函数


你可能感兴趣的:(Unity)