无法调用调用

时间:2019-09-22 03:44:53

标签: c# unity3d

我对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();
        }
    }

}

我希望延迟重新启动,以便游戏不会立即重新启动。任何帮助将不胜感激:)

1 个答案:

答案 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()视为异步/协程操作。