Unity-StartCoroutine和yield return

417 阅读1分钟

StartCoroutine: 开启一个协同程序

yield return: 返回调用迭代

    void Start(){
        Debug.Log("111");
        StartCoroutine(CorTest());
        Debug.Log("333");
    }
    IEnumerator CorTest(){
        Debug.Log("222");
        yield return null;
        Debug.Log("444");
    }

上面按照输出的顺序执行,在第一次调用StartCoroutine开启协程的时候和正常的方法调用相同,在遇到yield关键字后,根据返回值指定在什么时候继续(resume)协同程序。上面的代码片段中,yield return null会暂停协程,而这个时候会回到start函数内,往下执行,在下一帧开始后继续协同程序的执行。

    //暂停协同程序,下一帧再继续往下执行
    yield return null;
    
    //暂停协同程序,等到下一次调用FixedUpdate方法时再继续往下执行
    yield new WaitForFixedUpdate (); 

    //暂停协同程序,2秒之后再继续往下执行
    yield return new WaitForSeconds(2);

    //暂停此协同程序,开启SomeCortoutineMethod协同程序,直到SomeCortoutineMethod执行完
    yield return StartCoroutine("SomeCortoutineMethod");