Unity C#等待

时间:2017-06-08 01:29:39

标签: c# unity3d wait coroutine ienumerator

目前,我有这段代码

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。我想我可能会误解协同程序在这里如何运作。为什么我会得到这种行为,我将如何解决这个问题?提前致谢

1 个答案:

答案 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);
}