Unity协程

概念

协程就像一个函数,能够暂停执行并将控制权返还给 Unity,然后在下一帧继续执行。函数体全部执行完成,协程结束。或者在yield break;执行后结束协程。

开始协程

无参数

public class Test : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(SayHello()); // 开始一个协程
    }

    private IEnumerator SayHello()  // 必须有返回值
    {
        yield return 0;   // 当前帧结束执行,下一帧继续执行后面代码  
        Debug.Log("HelloWold");
    }
}

带参数

public class Test : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(SayHello(10)); // 开始一个协程
    }

    private IEnumerator SayHello(int a)  // 必须有返回值
    {
        a++;
        yield return a > 100;       // 当前帧结束执行,下一帧继续执行后面代码  
        Debug.Log(a);               //打印 11
    }
}

Start直接启动协程

private IEnumerator Start()
{
    yield return new WaitForSeconds(10.0f);     // 暂停十秒 继续执行。
    Debug.Log("HelloWold");
}

协程返回值

  • yield return null:下一帧再执行后续代码
  • yield return 6:(任意数字) 下一帧再执行后续代码
  • yield break:直接结束该协程的后续操作
  • yield return asyncOperation:等异步操作结束后再执行后续代码
  • yield return StartCoroution(/某个协程/):等待某个协程执行完毕后再执行后续代码
  • yield return WWW():等待WWW操作完成后再执行后续代码
  • yield return new WaitForEndOfFrame():等待帧结束,等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行
  • yield return new WaitForSeconds(0.3f):等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间会受到Time.timeScale的影响);
  • yield return new WaitForSecondsRealtime(0.3f):等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间不受到Time.timeScale的影响);
  • yield return WaitForFixedUpdate():等待下一次FixedUpdate开始时再执行后续代码
  • yield return new WaitUntil():将协同执行直到 当输入的参数(或者委托)为true的时候....如:yield return new WaitUntil(() => frame >= 10);
  • yield return new WaitWhile():将协同执行直到 当输入的参数(或者委托)为false的时候.... 如:yield return new WaitWhile(() => frame < 10);

结束协程

StopCoroutine : 结束单个协程
StopAllCoroutines : 结束所有协程

注意:
当用 SetActive(false) 禁用某个协程所附加到的游戏对象时,该协程也将停止。
调用 Destroy(example)(其中 example 是一个 MonoBehaviour 实例)会立即触发 OnDisable,并会处理协程,从而有效地停止协程。最后,在帧的末尾调用 OnDestroy。

通过在 MonoBehaviour 实例上将 enabled 设置为 false 来禁用 MonoBehaviour 时,协程不会停止。

更多阅读

精美壁纸

posted @ 2021-08-09 12:02  镜子-眼泪  阅读(272)  评论(0)    收藏  举报