Вызов не может быть вызван - PullRequest
0 голосов
/ 22 сентября 2019

Я очень плохо знаком с 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 Ответ

1 голос
/ 22 сентября 2019

Вы вызвали 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().Думайте о Invoke как об асинхронной / сопрограммной операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...