【发布时间】:2021-10-05 17:58:51
【问题描述】:
我目前正在开发一款游戏,在为游戏设计主菜单时,我需要能够访问不同的游戏对象并启用/禁用它们,以便用户访问菜单的不同部分。不同的部分被保存在它们各自的父游戏对象下,例如,所有与“选项菜单”相关的游戏对象都将位于一个名为“选项”的空游戏对象下。
以下是与包含对所有不同父对象的引用以及启用它们的方法的脚本有关的代码:
public class MenuSwitch : MonoBehaviour
{
public GameObject Main;
public GameObject Options;
public GameObject About;
public GameObject Load;
public void MainMenu()
{
Main.SetActive(true);
Options.SetActive(false);
About.SetActive(false);
Load.SetActive(false);
}
public void OptionsMenu()
{
Main.SetActive(false);
Options.SetActive(true);
About.SetActive(false);
Load.SetActive(false);
}
但是。问题是菜单的导航必须由玩家通过键入“命令”来完成。例如,他们会键入“/options”以转到选项菜单。此功能将在整个游戏中保留,因此我制作了另一个脚本来处理来自游戏内控制台的玩家命令。现在我如何从MenuSwitch 调用方法,因为在我的控制台脚本中创建MenuSwitch 对象似乎不起作用,它给出了一个错误:“Object reference not set to an instance of an object"。
这是处理主菜单中指定命令的脚本:
// Commands
string[] MainMenuCommands = { "./start", "./load", "./about", "./options", "./end" };
private void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
// Reset the console
playerInput = console.text;
console.text = "";
// Main Menu Input
if (CheckCommand(playerInput) == true)
{
RunCommand(playerInput, scene);
}
}
}
void RunCommand(string _command, int _scene)
{
// Main Menu commands
if (_scene == 0)
{
if (_command == MainMenuCommands[0]) { StartCoroutine(MM_Start()); }
else if (_command == MainMenuCommands[1]) { MM_Load(); }
else if (_command == MainMenuCommands[2]) { MM_About(); }
else if (_command == MainMenuCommands[3]) { MM_Options(); }
else if (_command == MainMenuCommands[4]) { MM_End(); }
}
}
MM 方法目前是空的,这就是启用/禁用的地方。如何启用或禁用 MenuSwitch 脚本中的游戏对象?这些对象通过 Unity 检查器在该脚本中引用。
【问题讨论】: