首页 > 解决方案 > 在按钮中使用 IEnumerator 进行 Onclick 功能,但场景管理器不起作用

问题描述

我目前正在为我的 Unity 游戏创建交叉淡入淡出动画。在我的暂停菜单中,通过单击菜单按钮淡入黑屏。当我这样做时,菜单按钮不会进入菜单场景。这是我的代码:

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");
}
}

标签: c#unity3d

解决方案


返回IEnumerators的方法不是魔术;它们可以用来描述一个协程,但是如果你想做某事,你需要启动那个协程。如果你像普通方法一样调用这样的方法,它会一直执行到第一个yield return语句,然后什么都不会发生。

传递枚举器StartCoroutine以执行该方法的其余部分:

StartCoroutine(Crossfade());

推荐阅读