虽然循环在 Unity3D 中冻结游戏

nor*_*myp -5 c# while-loop unity-game-engine

我一直在与 while 循环作斗争,因为它们几乎不适合我。它们总是导致我的 Unity3D 应用程序冻结,但在这种情况下,我真的需要它来工作:

bool gameOver = false;
bool spawned = false;
float timer = 4f;

void Update () 
{
    while (!gameOver)
    {
        if (!spawned)
        {
            //Do something
        }
        else if (timer >= 2.0f)
        {
            //Do something else
        }
        else
        {
            timer += Time.deltaTime;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望这些 if 语句在游戏运行时运行。现在它使程序崩溃,我知道这是 while 循环的问题,因为它在我取消注释的任何时候都会冻结。

Pro*_*mer 5

如果您想使用变量来控制while循环并在该while循环中等待,则在协程函数中并yield在每次等待之后执行此操作。如果你不屈服,它会等待太多,Unity 会冻结。在像 iOS 这样的移动设备上,它会崩溃。

void Start()
{
    StartCoroutine(sequenceCode());
}

IEnumerator sequenceCode()
{
    while (!gameOver)
    {
        if (!spawned)
        {
            //Do something
        }
        else if (timer >= 2.0f)
        {
            //Do something else
        }
        else
        {
            timer += Time.deltaTime;
        }

        //Wait for a frame to give Unity and other scripts chance to run
        yield return null;
    }
}
Run Code Online (Sandbox Code Playgroud)