我对Unity和C#非常陌生,并且刚刚开始学习基础知识。我制作了一个简单的游戏,其中的立方体向前移动,如果碰到障碍物,游戏将重新启动。但是,当我尝试使用Invoke延迟多维数据集碰撞导致游戏重新启动后的时间时,重新启动是即时的。
由于我还是C#和Unity的新手,所以我无法尝试很多东西。
这是我的GameManager脚本:
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
bool gameHasEnded = false;
public float restartDelay = 3f;
public void EndGame()
{
if (gameHasEnded == false)
{
gameHasEnded = true;
Debug.Log("Game Over!");
Invoke("Restart", restartDelay);
Restart();
}
}
void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
当玩家与某个对象碰撞时(障碍脚本):
using UnityEngine;
public class PlayerCollision : MonoBehaviour
{
public PlayerMovement movement;
void OnCollisionEnter(Collision collisionInfo)
{
if (collisionInfo.collider.tag == "Obstacle")
{
movement.enabled = false;
FindObjectOfType<GameManager>().EndGame();
}
}
}
我希望延迟重新启动,以便游戏不会立即重新启动。任何帮助将不胜感激:)
答案 0 :(得分:1)
您在延迟调用JAVA_HOME
函数后调用了Restart()
。
Restart
只需像这样删除// ...
if (gameHasEnded == false) {
gameHasEnded = true;
Debug.Log("Game Over!");
Invoke("Restart", restartDelay);
// This below is called instantly.
// It does not wait for the restartDelay.
Restart();
}
// ...
调用:
Restart()
请注意,代码不会在if (gameHasEnded == false) {
gameHasEnded = true;
Debug.Log("Game Over!");
Invoke("Restart", restartDelay);
}
处“暂停”。将Invoke()
视为异步/协程操作。