如何查找非活动对象?

时间:2018-03-15 16:56:19

标签: c# unity3d

我想找到并激活非活动对象:主菜单。 我尝试这个代码,但它无法正常工作。我做错了什么?

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

        }

2 个答案:

答案 0 :(得分:0)

您首先将父游戏对象设置为无效。试试这个:

    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);
    }

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

答案 1 :(得分:0)

在设置对象之前引用该对象或创建自己的方法,因为您将它们全部放在同一个父对象下,您可以使用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");