【问题标题】:How to access and disable a GameObject from a different script - Unity2D如何从不同的脚本访问和禁用游戏对象 - Unity2D
【发布时间】: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 检查器在该脚本中引用。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以创建一个空对象并将其命名为 MenuManager,并将 MenuScript 附加到它。然后在一个脚本中,你想调用 MenuSwitch 函数,声明一个类成员,如下所示:

    public MenuSwitch menuManager;
    

    在检查器中拖放 MenuManager 空游戏对象,然后您可以轻松地使用 MenuSwitch 脚本中的所有公共函数,只需从 menuManager 变量中调用它们,如下所示:

    menuManager.MainMenu();
    menuManager.OptionsMenu();
    

    希望对你有帮助:)

    【讨论】:

    • 成功了,谢谢!
    • 没问题,我很高兴它有帮助:D
    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多