unity3d 为什么我的协程代码不能正常工作?

z9ju0rcb  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(370)

我一直在尝试编写一些代码,使“游戏结束”屏幕在我的Unity游戏3秒后出现。然而,每当我试图使用一个协程,计数3秒的游戏时间,Game Over屏幕最终完全不出现,并且在玩家对象被销毁后游戏继续运行。调用Game Over屏幕函数的代码在Player脚本中;我已经确保在Unity编辑器中引用了正确的游戏对象。如果我这样调用它,游戏结束屏幕可以正常工作:

public void GameOver()
    {

        explosionController.StartExplosion(transform.position);

        particleJumpTrigger.DisableParticleSystem();
        Destroy(gameObject);

        gameOverScreen.SetActive(true);

    }

然而,当我更改代码时,游戏结束屏幕根本不出现:

//This function sets a wait time for the Game Over screen to appear after the player dies
    public IEnumerator GameOverScreen()
    {
        float countdownTime = 0f;

        while (countdownTime < 3.0f)
        {
            countdownTime += Time.deltaTime;
            yield return null; // Wait for the next frame
        }

        gameOverScreen.SetActive(true);
    }

    //This function is called when the player collides with a different color, destroying the player object
    public void GameOver()
    {

        explosionController.StartExplosion(transform.position);

        particleJumpTrigger.DisableParticleSystem();
        Destroy(gameObject);

        GameOverScreen();

    }

我试过用其他方法来实现3秒计数的函数,但是我的想法似乎都不能解决这个问题。我现在有点没有主意了,需要一些外部的指导来做什么。

khbbv19g

khbbv19g1#

您必须使用StartCoroutine来启动任何协同程序。请将对GameOverScreen的调用更改为StartCoroutine(GameOverScreen())

public void GameOver()
{
   explosionController.StartExplosion(transform.position);

   particleJumpTrigger.DisableParticleSystem();
   Destroy(gameObject);

   StartCoroutine(GameOverScreen());
}
b09cbbtk

b09cbbtk2#

public IEnumerator GameOverScreen()
{
    yield return new WaitForSeconds(3);
    gameOverScreen.SetActive(true);
}

此外,应使用StartCoroutine调用IEnumerator:

StartCoroutine(GameOverScreen());

如果你不知道Coroutines,看看这个:
https://www.youtube.com/watch?v=5L9ksCs6MbE

相关问题