目前,我有这段代码
void update()
{
Debug.Log(1);
StartCoroutine(wait());
Debug.Log(4);
}
IEnumerator wait()
{
Debug.Log(2)
yield return new WaitForSeconds(3);
Debug.Log(3)
}
我想要一个1,2,3,4的输出,但我得到的是1,2,4,3。我想我可能会误解协同程序在这里如何运作。为什么我会得到这种行为,我将如何解决这个问题?提前致谢
答案 0 :(得分:1)
要了解有关Coroutines的更多信息,我建议您阅读here给出的优秀答案。
要为代码提供高级摘要,当您在wait()上调用StartCoroutine时,所有代码都将运行,直到您的yield语句运行。所以现在你的输出是1,2。当调用yield时,Unity将返回并执行update()中的代码,记录int 4. 3秒后它将返回wait()并继续执行,给出最终输出1 ,2,4,3。
如果要输出1,2,3,4,则需要使用yield return来调用wait()方法,然后打印4。为了做到这一点,update()中的代码需要在返回类型IEnumerator本身的方法中。
void update()
{
StartCoroutine(dosomething());
}
IEnumerator dosomething()
{
Debug.Log(1);
yield return wait();
Debug.Log(4);
}
IEnumerator wait()
{
Debug.Log(2);
yield return new WaitForSeconds(3);
Debug.Log(3);
}