【发布时间】:2020-04-29 02:14:07
【问题描述】:
我正在编写我的第一个 Unity 游戏。我有一系列嵌套函数,我们称它们为 Function1、Function2 等。假设在 Function3 中,我想在短时间内显示一些内容在执行更多代码之前。
如果我将 Function3 设为 Coroutine 并以 yield return new WaitForSeconds 退出,这不会阻止我的其他函数中的所有代码执行,而只会阻止 Function3 中其余代码的执行,对吗?与此同时,函数 1 和函数 2 继续愉快地前进。
有没有什么方法可以在不将每个函数重组为协程并放入大量 yield 和 while 语句的情况下获得我想要的东西? (在我的实际游戏中,我想成为协程的函数之前还有很多函数。)
我将添加一些伪代码来说明我的情况。
谢谢。
public Function1()
{
.
.
Does some stuff
.
.
call Function2()
.
.
Do some more stuff
.
.
}
public Function2()
{
.
.
Does some stuff
.
.
StartCoroutine(Function3())
.
.
Does some more stuff
.
.
return to Function2;
}
IEnumerator Function3()
{
.
.
Does some stuff...
Now I want to wait for specified time (say, .5 seconds) to display a message, play a sound, etc., **without continuing the code in Function2 or Function1 * *!
yield return new WaitForSeconds(.5f)
Then do some more stuff
.
.
return to Function2;
}
【问题讨论】:
-
在本站的代码块中编写代码,突出显示代码并按下类似
{ }的按钮 -
StartCoroutine不会暂停其所在函数的执行。如果您想等待协程完成,那么该代码需要进入协程内部函数(或者方法本身需要是协程)。请参阅this answer、this answer 和 this answer。 -
谢谢。 Draco18 的一个链接将我发送到嵌套协程的链接,这对我有很大帮助。我需要用“yield return StartCoroutine()”调用最后一个例程。这会暂停执行,直到我的计时器例程完成并且滚动完成。