我一直在尝试编写一些代码,使“游戏结束”屏幕在我的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秒计数的函数,但是我的想法似乎都不能解决这个问题。我现在有点没有主意了,需要一些外部的指导来做什么。
2条答案
按热度按时间khbbv19g1#
您必须使用
StartCoroutine
来启动任何协同程序。请将对GameOverScreen
的调用更改为StartCoroutine(GameOverScreen())
。b09cbbtk2#
此外,应使用
StartCoroutine
调用IEnumerator:如果你不知道
Coroutines
,看看这个:https://www.youtube.com/watch?v=5L9ksCs6MbE