问题描述
我刚刚开始自学编程,并且一直在观看 Brackey 的教程系列。我正在尝试创建一个暂停菜单,并且我已经按照视频进行了操作,但是由于某种原因,当我点击退出时,我无法激活菜单。我已经仔细检查了代码,与屏幕上的内容相比,它应该可以正常工作。有什么我遗漏的吗?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PauseMenu : MonoBehavIoUr
{
public static bool isGamePaused = false;
public GameObject pauseMenu;
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (isGamePaused)
{
ResumeGame();
}
else
{
PauseGame();
}
}
}
void ResumeGame()
{
pauseMenu.SetActive(false);
Time.timeScale = 1f;
isGamePaused = false;
}
void PauseGame()
{
pauseMenu.SetActive(true);
Time.timeScale = 0f;
isGamePaused = true;
}
}
解决方法
现在我可以看到相关的代码和层次结构,我相信我看到了问题。在您的脚本中,您正在检查 Update()
中的输入,该输入仅在脚本组件所在的 GameObject 在层次结构中处于活动状态时调用。
当您切换暂停时,您正在激活和停用您在检查器中分配的游戏对象。作为您在具有脚本的 GameObject 中分配的对象,Update()
在禁用后将永远不会被调用。
您有几个选项,但最简单的一个是将面板 pauseMenu
的引用拖入作为在脚本中切换的引用对象,而不是您当前拥有的 Canvas
对象。这样,Canvas
就可以充当 pauseMenu
的管理器,在输入更改时切换它。