[Unity] 协程Coroutine

2022-05-06  本文已影响0人  _Walker__

  本文的内容是2015-11-27,我在印象笔记里记的踩坑备忘录。然而,最近又遇到了它导致的问题,发现自己慢慢遗忘了这些坑。所以,炒冷饭挪到这边了(印象笔记好多年没登录,怕哪天账号被清)。

正文

1、阻塞执行Coroutine有两种方式

  1. yield return StartCoroutine(...)
  2. while(itor.MoveNext()) yield return null;
对比:

方式 1

方式 2

注意:在外层用 2 内层用 1 的协程中,会出现时序混乱的问题,使用时应当留意。

static IEnumerator Co1()
{
    IEnumerator itor = Co2();
    Debug.Log("Co Begin:" + Time.frameCount);
    while (itor.MoveNext()) yield return null;
    Debug.Log("Co End:" + Time.frameCount);
}

static IEnumerator Co2()
{
    yield return new WaitForSeconds(10);
}

// StartCoroutine(Co1()) 输出结果如下,中间只隔了1帧,而不是10秒:
// Co Begin:0
// Co End:1

2、使用IEnumerator接收协程函数的返回值时,可以使用StopCoroutine结束协程。

IEnumerator itor = CoroutineFn();
StartCoroutine(itor);  // 开启协程
// do somthing...
StopCoroutine(itor);  // 停止刚开启的协程
上一篇 下一篇

猜你喜欢

热点阅读