【问题标题】:Using a Coroutine in a loop在循环中使用协程
【发布时间】:2021-12-08 03:01:49
【问题描述】:

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

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

任何帮助将不胜感激!非常感谢。

【问题讨论】:

  • 答案是:将循环本身置于协程中,然后使用 StartCoroutine(PlayAndWait(x)) 代替 yield return PlayAndWait(x)
  • 哦,很抱歉上传图片。我不知道,但非常感谢你告诉我!
  • 非常感谢您的回答!!终于成功了!

标签: c# for-loop unity3d coroutine


【解决方案1】:

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++;
    

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

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2020-02-15
    • 1970-01-01
    • 2021-06-29
    • 2016-07-29
    • 2014-03-05
    • 2020-02-26
    • 1970-01-01
    • 2014-03-18
    相关资源
    最近更新 更多