我一直在尝试编写一些代码,使我的统一游戏中的“游戏结束”屏幕在 3 秒后出现。然而,每当我尝试使用计算 3 秒游戏时间的协程时,游戏结束屏幕最终根本不会出现,并且游戏在玩家对象被销毁后继续运行。调用 Game Over 屏幕函数的代码在 Player 脚本中;我已确保在统一编辑器中引用了正确的游戏对象。如果我这样称呼它,游戏结束屏幕工作正常:
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 秒的函数,但我的想法似乎都无法解决问题。我现在有点不知所措,需要一些外部指导来做什么。
您必须使用
StartCoroutine
来启动任何协程。将您对GameOverScreen
的呼叫更改为StartCoroutine(GameOverScreen())
.
public void GameOver()
{
explosionController.StartExplosion(transform.position);
particleJumpTrigger.DisableParticleSystem();
Destroy(gameObject);
StartCoroutine(GameOverScreen());
}
public IEnumerator GameOverScreen()
{
yield return new WaitForSeconds(3);
gameOverScreen.SetActive(true);
}
还应使用
StartCoroutine
调用 IEnumerator:
StartCoroutine(GameOverScreen());
如果你不知道
Coroutines
看这个:
我想通了问题是什么。我在我的播放器脚本中编写这段代码,它与我场景中的播放器对象一起被销毁,所以协同程序永远无法真正完成!我通过创建一个单独的脚本来管理 Game Over 屏幕来修复此问题,现在它可以完美运行。无论如何,感谢您的所有帮助!