我用Unity制作了WebGL游戏。每一帧都不需要进行一些计算,因此我将它们放在一个协程中。但是当游戏处于后台时,协同程序的工作速度比正常情况慢,并且等待额外的5-10秒。
例如,士兵跑向我,我向他们发射子弹以杀死他们。当他们进入射程时,他们也开始射击。我检查了敌人是否在与协程的范围内。当我在浏览器上看到其他标签时,一些敌人比正常情况更接近,有些人会通过游戏画面。这使得游戏无法播放。
有没有办法让协同程序正常工作,或者我需要将每个计算都放到更新方法中?
示例代码是:
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSeconds(Constants.ENEMY_THINKING_TIME);
}
}
答案 0 :(得分:1)
Coroutine不是“奇怪地”行事。使用WaitForSeconds
是问题,这就是为什么我改变了这个问题的标题。当您希望等待或计时器在Unity没有焦点或在另一个选项卡中时停止计数时,将使用WaitForSeconds
yield指令。如果有焦点或者如果使用WebGL返回选项卡,它将恢复。
相反的是WaitForSecondsRealtime
当您希望等待或计时器正常继续时使用,即使应用程序没有焦点,甚至在另一个标签中也是如此。它使用未缩放的功能。在您的情况下,您需要使用WaitForSecondsRealtime
yield指令。
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSecondsRealtime(Constants.ENEMY_THINKING_TIME);
}
}