Игнорировать OnMouseDown при перезагрузке сцены - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть сцена с прозрачной кнопкой, заполняющей весь экран. Кнопка используется в качестве многофункциональной кнопки, которая заставляет игрока прыгать, если игра находится в игре. Но если игра окончена и кнопка нажата, сцена будет перезагружена.

У этой кнопки есть триггер события: прикреплен указатель вниз, который вызывает функцию «Действие», показанную ниже.

void Action() {
    if (game_isOver) {
        SceneManager.Loadscene(SceneManager.GetActiveScene().name);
    } else {
        Jump();
    }
}

Проблема в том, что как только сцена загружается, кнопка обнаруживает нажатие и снова вызывает Action(). И это слишком быстро, чтобы избежать, нажав кнопку быстро.

Каков наилучший способ избежать этого. Я не хочу, чтобы у меня была задержка, чтобы дать пользователю время завершить щелчок, потому что я хочу, чтобы он мог дважды щелкнуть мышью, чтобы быстро войти в игру.

1 Ответ

0 голосов
/ 05 сентября 2018

Я предлагаю использовать функцию сопрограммы LoadSceneAsync , чтобы загрузить сцену, с которой вы можете справиться в ситуации загрузки.

bool isLoading;

void Action() {
    if (game_isOver) {
        if(!isLoading){
            StartCoroutine(LoadNewScene());
        }
    } else {
        Jump();
    }
}

IEnumerator LoadNewScene() {

    AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().name);
    while (!asyncOperation.isDone)
    {
        isLoading = true;
        Debug.Log("Loading progress: " + asyncOperation.progress);
        yield return null;
    }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...