首页 > 解决方案 > 在循环中使用协程

问题描述

我对循环中的协程有疑问。更具体地说,我如何实现它,我的循环继续检查条件,直到协程中的 waitForSeconds 结束。

我附上了我的代码截图。我的问题是在 myAudio.Play(); 之后显示“现在我被处决”这行。这是有道理的,因为协程只等待 yield return 之后的语句,但我怎样才能让它与 for 循环一起工作?

任何帮助,将不胜感激!太感谢了。

在此处输入图像描述

标签: c#for-loopunity3dcoroutine

解决方案


StartCoroutine每个都IEnumerator作为一个新的协程开始,并立即与其余代码继续。

所以正如所说,没有你的代码的进一步上下文你会做的事情就像

private void playDBStack()
{
    fillList();

    StartCoroutine(playDBStackRoutine())
}

private IEnumerator playDBStackRoutine()
{
    for(var i = 0; i < 2; i++)
    {
        // executes playAudio and waits for it to finish
        yield return playAudio();
    }
}

private IEnumerator playAudio()
{
    var x = chooseList(score);
    // executes PlayAndWait and wait for it to finish
    yield return PlayAndWait(x);
}

这样您就可以执行,同时等到IEnumerators 完成后再进行下一个。


一些进一步的说明:

  • 线

     myAudio.GetComponent<AudioSource>();
    

    绝对什么都不做。

  • updateScore当前状态下的整个方法可以简单地通过使用来替换

     score++;
    

    我会考虑一种可以用简单的运算符“代码气味”代替的方法;)


推荐阅读