在循环中使用协程
Posted
技术标签:
【中文标题】在循环中使用协程【英文标题】:Using a Coroutine in a loop 【发布时间】:2021-12-08 03:01:49 【问题描述】:我有一个关于循环中的协程的问题。更具体地说,我如何实现它,我的循环继续检查条件,直到协程中的 waitForSeconds 结束。
我附上了我的代码截图。我的问题是在 myAudio.Play(); 之后显示“现在我被执行”这行。 这是有道理的,因为协程只等待 yield return 之后的语句,但我怎样才能使它与 for 循环一起工作?
任何帮助将不胜感激!非常感谢。
【问题讨论】:
Why not upload images of code/errors when asking a question? 答案是:将循环本身置于协程中,然后使用StartCoroutine(PlayAndWait(x))
代替 yield return PlayAndWait(x)
哦,很抱歉上传图片。我不知道,但非常感谢你告诉我!
非常感谢您的回答!!终于成功了!
【参考方案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);
这样你执行,同时等到IEnumerator
s 完成后再去下一个。
一些进一步的说明:
线
myAudio.GetComponent<Audiosource>();
什么都不做。
整个方法 updateScore
在其当前状态下可以简单地通过使用替换
score++;
我会考虑一种可以用简单的运算符“代码气味”代替的方法;)
【讨论】:
以上是关于在循环中使用协程的主要内容,如果未能解决你的问题,请参考以下文章