我用 Unity 制作了 WebGL 游戏。不需要每个帧都进行一些计算,因此我将它们放在协程中。但当游戏在后台运行时,协程的工作速度会比平时慢,并且会额外等待 5-10 秒。
例如,士兵跑向我,我向他们发射子弹以杀死他们。当他们进入射程时,他们也会开火。我检查了敌人是否在协程范围内。当我进入浏览器上的其他选项卡时,一些敌人比平常更接近,而一些敌人则来到并经过游戏屏幕。这使得游戏无法玩。
有没有办法让协程正常工作,或者我需要将每个计算都放在更新方法中?
示例代码是:
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSeconds(Constants.ENEMY_THINKING_TIME);
}
}
协程的行为并不“奇怪”。指某东西的用途WaitForSeconds
是问题,这就是为什么我更改了这个问题的标题。这WaitForSeconds https://docs.unity3d.com/ScriptReference/WaitForSeconds.html当你想要等待或定时器时,使用yield指令stop当 Unity 没有焦点或在另一个选项卡中时进行计数。当有焦点时或当您返回选项卡(如果使用 WebGL)时,它将恢复。
相反的是WaitForSecondsRealtime https://docs.unity3d.com/ScriptReference/WaitForSecondsRealtime.html当您想要等待或计时器时使用continue通常,即使应用程序没有焦点或者即使在另一个选项卡中也是如此。它使用未缩放的函数。在你的情况下,你需要使用WaitForSecondsRealtime
产量指令。
private IEnumerator ActionDeciderCoroutine()
{
while (true)
{
DoAction();
yield return new WaitForSecondsRealtime(Constants.ENEMY_THINKING_TIME);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)