C# 等到协同程序完成后再开始另一个协同程序[Unity C]
我是一个初学者,我对协同程序的了解非常有限。 我让协程1生成两个列表,而协程2将使用这两个列表。执行此操作时:C# 等到协同程序完成后再开始另一个协同程序[Unity C],c#,unity3d,coroutine,ienumerator,C#,Unity3d,Coroutine,Ienumerator,我是一个初学者,我对协同程序的了解非常有限。 我让协程1生成两个列表,而协程2将使用这两个列表。执行此操作时: void test () { StartCoroutine (Coroutine1); StartCoroutine (Coroutine2); } 只生成其中一个列表,导致在协同例程2中出错。 但如果我这样做: IEnumerator Coroutine1(){ for (int i = 0; i < numberOfListsToBeGener
void test ()
{
StartCoroutine (Coroutine1);
StartCoroutine (Coroutine2);
}
只生成其中一个列表,导致在协同例程2中出错。
但如果我这样做:
IEnumerator Coroutine1(){
for (int i = 0; i < numberOfListsToBeGenerated; i++) {
//generate List
yield return StartCoroutine(Coroutine2());
}
}
IEnumerator协同程序1(){
for(int i=0;i
团结冻结了。我使用协同程序来解决优化问题,因为生成列表会导致冻结 如果您想等待一个协程完成,可以将
yield return Coroutine1()代码>在正文的第一行Coroutine2
并将其余代码放在后面,这样Coroutine2
将等待Coroutine1
完成,然后继续执行其余代码
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;
}
这些列表是否可以用作类属性?在协同例程1中生成的两个列表是类型为Class1的Object1和Object2的属性。Coroutine2将从Object1.List和Object2.List生成List3,并将其用作类型为Class2的Object3的属性。您是否尝试使用返回新的WaitForEndofFrame
WaitForEndofFrame没有帮助,没有任何更改会导致Unity崩溃too@IGClusterFck看到我刚才的编辑了吗,我改正了答案中的一个小语法错误。我还测试了它,效果很好。请注意,当协同程序完成时,您不需要返回null
,它可以被忽略。如果有必要,您仍然希望在其他地方获得收益率
(例如收益率返回WWW
)。