我用 Unity 制作了 WebGL 游戏。不需要每个帧都进行一些计算,因此我将它们放在协程中。但是当游戏在后台时,协程的工作速度比正常情况下要慢,并且需要额外等待 5-10 秒。
例如,士兵跑向我,我向他们发射子弹以杀死他们。当他们进入射程时,他们也会开火。我检查了敌人是否在协程范围内。当我进入浏览器上的其他选项卡时,一些敌人比平常更接近,而一些敌人则来到并经过游戏屏幕。这使得游戏无法玩。
有没有办法让协程正常工作,或者我需要将每个计算都放在更新方法中?
示例代码是:
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSeconds(Constants.ENEMY_THINKING_TIME);
}
}
最佳答案
协程的行为并不“奇怪”。使用 WaitForSeconds
是问题所在,这就是我更改此问题标题的原因。 WaitForSeconds
当您希望等待或计时器在 Unity 没有焦点或位于另一个选项卡中时停止计数时,请使用yield 指令。当有焦点时或当您返回选项卡(如果使用 WebGL)时,它将恢复。
相反的是WaitForSecondsRealtime
当您希望等待或计时器正常继续时使用,即使应用程序没有焦点或者即使在另一个选项卡中也是如此。它使用未缩放的函数。在您的情况下,您需要使用 WaitForSecondsRealtime
Yield 指令。
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSecondsRealtime(Constants.ENEMY_THINKING_TIME);
}
}
关于c# - 当应用程序未处于焦点或位于另一个选项卡中时,WaitForSeconds 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46699960/