【问题标题】:Wait until coroutine finishes before starting another coroutine [Unity C#] [duplicate]等到协程完成后再开始另一个协程 [Unity C#] [重复]
【发布时间】:2018-10-29 15:30:17
【问题描述】:

我是一个初学者,我对协程的了解非常有限。 我让 Coroutine1 生成两个列表,而 Coroutine2 将使用这两个列表。这样做时:

void test ()
{   
    StartCoroutine (Coroutine1);
    StartCoroutine (Coroutine2);
}

只生成了一个列表,导致 Coroutine2 内部出错。 但如果我这样做:

IEnumerator Coroutine1(){
    for (int i = 0; i < numberOfListsToBeGenerated; i++) {
        //generate List
        yield return StartCoroutine(Coroutine2());
    }
}

Unity 冻结了。我正在使用协程来解决优化问题,因为生成列表会导致冻结。

【问题讨论】:

  • 列表是否可以/被用作类属性?
  • Coroutine1中生成的两个列表是Class1类型的Object1和Object2的属性。 Coroutine2 是从 Object1.List 和 Object2.List 生成 List3 并将其用作 Class2 类型的 Object3 的属性。
  • 你试过把yield return new WaitForEndofFrame
  • waitForEndOfFrame 没有帮助,没有任何改变

标签: c# unity3d coroutine ienumerator


【解决方案1】:

如果您想等待一个协程完成,您可以将yield return Coroutine1(); 放在主体Coroutine2 的第一行,然后将其余代码放在后面,这样Coroutine2 将等待@ 987654324@ 直到完成,然后它将继续执行其余代码。

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

IEnumerator Coroutine2() {
    yield return Coroutine1();

    //Coroutine1 is now finished and you can use its result
}
IEnumerator Coroutine1() {
    //create your lists then call yield return
    yield return null;
}

【讨论】:

  • 可悲的是,Unity 也崩溃了
  • @IGClusterFck 查看我刚刚所做的编辑,我更正的答案中有一个小语法错误。我也测试了它,它工作正常。请注意,当协程完成时,您不需要yield return null,可以将其关闭。如果有必要,您仍然希望在其他地方使用yield(例如yield return WWW)。
猜你喜欢
  • 2019-11-01
  • 2017-12-17
  • 2017-11-05
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2018-08-29
  • 2014-12-30
相关资源
最近更新 更多