繁体   English   中英

在按钮中对 Onclick function 使用 IEnumerator,但场景管理器不起作用

[英]Using IEnumerator for Onclick function in a Button, but scenemanager doesnt work

我目前正在为我的 Unity 游戏创建交叉渐变 animation。 在我的暂停菜单中,通过单击菜单按钮淡入黑屏。 当我这样做时,菜单按钮不会 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");
}
}

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

将枚举器传递给StartCoroutine执行方法的rest:

StartCoroutine(Crossfade());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM