c# - 在按钮中使用 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");
}
}
解决方案
返回IEnumerators
的方法不是魔术;它们可以用来描述一个协程,但是如果你想做某事,你需要启动那个协程。如果你像普通方法一样调用这样的方法,它会一直执行到第一个yield return
语句,然后什么都不会发生。
传递枚举器StartCoroutine
以执行该方法的其余部分:
StartCoroutine(Crossfade());
推荐阅读
- docker - 对 docker 标签的概念感到困惑
- c++ - 在 debian 8 中运行 make -j2 错误时,我的 build.log 文件中有一个非常奇怪的错误
- javascript - 我的代码是第二个。我需要尽可能短
- python - Waitress 和 GUnicorn 大数据输入比 Flask 开发服务器慢很多
- apache-camel - Camel route SNMP Trap route - V3 陷阱无响应
- r - R中的日历热图
- javascript - React Native MapView.Marker,不变违规:“AIRGoogleMapMarker”,
- android - 为 Android 应用程序存储经过训练的 ML 模型的最佳方式是什么?
- azure - 如何在 az cli 中查找特定资源的资源组
- objective-c - dispatch_block_cancel 是否释放调度块?