Unity3D协程yield的理解

时间:2021-04-10 23:30:41

   Unity3D协程的核心在于“yield return 0"命令,这句代码的意义是马上停止当前函数,然后在下一帧中从这里重新开始。举个例子:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoroutineCountdown : MonoBehaviour
{
    public float floattimer;
    public float timer;

    void Start()
    {
        StartCoroutine(Countdown());
    }

    IEnumerator Countdown()
    {
        int seconds = 0;
        while (true)
        {
            //timer累加到1时,相当于运行了1秒后,会timer大于1,不会执行yield return 0,而结束循环
            //接着执行second++;second通过log对用户可见,随着程序执行,每过1秒输出累加时间值1,2,3。。。
            for (float timer = 0; timer < 1;)
            {
                yield return 0;
                timer += Time.deltaTime;
            }
            seconds++;
            Debug.Log(seconds + " seconds have passed since the Coroutine started.");
        }
    }
}

  在timer满足循环条件,即timer小于1时,会执行yield return 0,这时候会停止countdown函数,然后在下一帧中重新从yield处开始执行,所以在下一帧时会首先运行yield,然后是timer+=Time.deltaTime,当timer大于1时,这时候不满足循环的判断条件,这时候会结束循环。接着运行下一行代码:second++,对Second累加1,并输出Log信息。

  在Console窗口中会输出log信息,可见Second每秒累加1次。其实每次输出log信息时,

Unity3D协程yield的理解  

  另外注意,结束一个协程需要使用协程函数的字符串形式:StopCoroutine("Countdown");