Использование IEnumerator для функции Onclick в кнопке, но диспетчер сцены не работает - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время я создаю анимацию кроссфейда для своей игры Unity. В моем меню паузы я выхожу на черный экран при нажатии кнопки меню. Когда я это делаю, кнопка меню не go в сцене меню. Вот мой код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Pause : MonoBehaviour
{
public GameObject PauseMenuUI;

bool isPaused = false;

public GameObject PauseMenu;
public GameObject OptionsMenu;

public Animator Transition;
public int TransitionTime = 1;

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.Escape))
    {
        // Open or close the pause menu
        if (!isPaused)
        {
            OpenPauseMenu();
        }
        else if (isPaused)
        {
            Resume();
        }
    }
}

// Main Menu
void OpenPauseMenu()
{
    PauseMenuUI.SetActive(true);

    Time.timeScale = 0f;

    isPaused = true;
}

public void Resume()
{
    Back();

    PauseMenuUI.SetActive(false);

    Time.timeScale = 1f;

    isPaused = false;
}

public void Options()
{
    PauseMenu.SetActive(false);
    OptionsMenu.SetActive(true);
}

public void Menu()
{
    Resume();
    Crossfade();
}

// Options Menu
public void Back()
{
    OptionsMenu.SetActive(false);
    PauseMenu.SetActive(true);
}

// Crossfade
IEnumerator Crossfade()
{
    Transition.SetTrigger("Start");

    yield return new WaitForSeconds(TransitionTime);

    SceneManager.LoadScene("Menu");
}
}

1 Ответ

1 голос
/ 05 августа 2020

Методы, возвращающие IEnumerators, не являются магическими; их можно использовать для описания сопрограммы, но вам нужно запустить эту сопрограмму, если вы хотите что-то сделать. Если вы вызываете такой метод как обычный метод, он будет выполняться до первого оператора yield return, и тогда больше ничего не произойдет.

Передайте перечислитель в StartCoroutine для выполнения остальной части метод:

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