如何查找非活动对象



我想查找并激活非活动对象:主菜单。我尝试了这段代码,但它不起作用。我做错了什么?

        if (Input.GetKey(KeyCode.Escape))
        {
            this.gameObject.SetActive(false);
            GameObject.Find("Main Menu").SetActive(true);
        }

在设置对象之前对对象的引用,或者创建自己的方法,因为您可以将它们都放在同一个父对象下,因此可以使用 GetComponentsInChildren

public static GameObject FindObject(this GameObject parent, string name)
 {
     Transform[] trs= parent.GetComponentsInChildren<Transform>(true);
     foreach(Transform t in trs){
         if(t.name == name){
              return t.gameObject;
         }
     }
     return null;
 }

这是一个应存储在静态类中的扩展方法。你像这样使用它:

GameObject obj = parentObject.FindObject("Main Menu");

首先将父游戏对象设置为非活动状态。试试这个:

    if (Input.GetKey(KeyCode.Escape))
    {
        GameObject.Find("Main Menu").SetActive(true);
        this.gameObject.SetActive(false);
    }

最简单的方法是在类的顶部创建一个公共引用,如下所示:

public GameObject MainMenu;

然后,在编辑器中,将 MainMenu 对象拖到新创建的引用上。之后,在你的逻辑中,你可以简单地这样做:

    public GameObject MainMenu;
    if (Input.GetKey(KeyCode.Escape))
    {
        MainMenu.SetActive(true);
        this.gameObject.SetActive(false);
    }

这样做有助于防止空引用,因为它是类型安全的。

最新更新