当应用程序不在焦点或在另一个选项卡中时,WaitForSeconds 停止工作
WaitForSeconds stops working when app is not in focus or in another tab
我用 Unity 制作了 WebGL 游戏。并非每一帧都需要进行一些计算,因此我将它们放在协程中。但是当游戏在后台时,协程比正常情况下工作得更慢,并且会额外等待 5-10 秒。
比如战士运行我和我开枪把他们打死。当他们进入射程时,他们也开始开火。我检查了敌人是否在协程范围内。当我转到浏览器上的其他选项卡时,一些敌人比正常情况更近,一些敌人过来并经过游戏屏幕。这使游戏无法玩。
有没有办法让协同程序正常工作,或者我需要把每一个计算都放到更新方法中?
示例代码为:
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSeconds(Constants.ENEMY_THINKING_TIME);
}
}
协程未执行 "strangely"。 WaitForSeconds
的使用是问题所在,这就是我更改此问题标题的原因。 WaitForSeconds
yield 指令用于当您希望等待或计时器在 Unity 没有焦点或在另一个选项卡中时 停止 计数。如果使用 WebGL,当有焦点或当您 return 到选项卡时,它将恢复。
相反的是 WaitForSecondsRealtime
,当您希望等待或计时器正常 继续 时使用,即使应用程序没有焦点或什至在另一个选项卡中.它使用未缩放的功能。在您的情况下,您需要使用 WaitForSecondsRealtime
yield 指令。
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSecondsRealtime(Constants.ENEMY_THINKING_TIME);
}
}
我遇到了这个问题,并通过在 WebGL 播放器设置 -> 分辨率和演示中启用“运行 在后台”解决了这个问题。
我用 Unity 制作了 WebGL 游戏。并非每一帧都需要进行一些计算,因此我将它们放在协程中。但是当游戏在后台时,协程比正常情况下工作得更慢,并且会额外等待 5-10 秒。
比如战士运行我和我开枪把他们打死。当他们进入射程时,他们也开始开火。我检查了敌人是否在协程范围内。当我转到浏览器上的其他选项卡时,一些敌人比正常情况更近,一些敌人过来并经过游戏屏幕。这使游戏无法玩。
有没有办法让协同程序正常工作,或者我需要把每一个计算都放到更新方法中?
示例代码为:
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSeconds(Constants.ENEMY_THINKING_TIME);
}
}
协程未执行 "strangely"。 WaitForSeconds
的使用是问题所在,这就是我更改此问题标题的原因。 WaitForSeconds
yield 指令用于当您希望等待或计时器在 Unity 没有焦点或在另一个选项卡中时 停止 计数。如果使用 WebGL,当有焦点或当您 return 到选项卡时,它将恢复。
相反的是 WaitForSecondsRealtime
,当您希望等待或计时器正常 继续 时使用,即使应用程序没有焦点或什至在另一个选项卡中.它使用未缩放的功能。在您的情况下,您需要使用 WaitForSecondsRealtime
yield 指令。
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSecondsRealtime(Constants.ENEMY_THINKING_TIME);
}
}
我遇到了这个问题,并通过在 WebGL 播放器设置 -> 分辨率和演示中启用“运行 在后台”解决了这个问题。