Unity 协同程序-2

114 阅读2分钟

协程的本质

协程可以分成两个部分:协程函数本体(迭代器函数),协程调度器。

协程本体就是一个能够在中间暂停返回的函数。达到分步的效果。

协程调度器是Unity内部实现的,会在对应的时机帮助我们继续执行协程函数。达到分时的效果。

协程本体是迭代器方法的体现

public class Test : MonoBehaviour
{
    private void Start()
    {
        //1.协程本体函数
        //如果我们不通过Unity提供的方法开启协程函数
        //Unity的协程调度器是不会帮我们管理协程函数的
        IEnumerator ie = Test1();
        //但是我们可以自己执行协程函数内容
        //MoveNext会执行到 yield return 为止
        //并将yield return的结果赋值给Current
        //另外MoveNext会有一个bool类型的返回值,表示这个协程是否执行完毕
        ie.MoveNext();
        print(ie.Current);//1
        ie.MoveNext();
        print(ie.Current);//2
    }

    IEnumerator Test1()
    {
        //第一步
        print(1);
        yield return 1;
        //第二步
        print(2);
        yield return 2;
    }
}

协程调度器

继承自MonoBehaviour后开启协程。相当于把一个协程函数(迭代器)放入到Unity的协程调度器中帮助我们管理进行执行,具体的yield return后面的规则也是Unity定义的一些规则。除了可以直接返回数字,null之外,剩下的需要new的对象(比如:WaitForEndOfFrame,WaitForSeconds等)都是YieldInstruction的子类。

简单的理解迭代器函数:C#看到迭代器函数和yield return语法糖,就会把原本是一个的函数变成“几部分”,我们就可以通过迭代器从上到下遍历这“几部分”进行执行,达到了将一个函数中的逻辑分时执行的目的。

而协程调度器就是利用迭代器函数返回的内容来进行之后的处理。比如Unity中的协程调度器根据yield return返回的内容,决定下一次在何时继续执行迭代器的“下一部分”。

image.png

总结

协程的本质就是利用C#的迭代器函数“分步执行”的特点,加上协程调度器的逻辑,实现的一套分时执行函数的规则!

qrcode.jpg