【问题标题】:How to find inactive object? [duplicate]如何找到非活动对象? [复制]
【发布时间】:2018-03-16 01:18:15
【问题描述】:

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

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

        }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • NullReferenceException: 对象引用未设置为对象 dx.Update () 的实例(在 Assets/dx.cs:17)
      • 确保 100% 确保“主菜单”对象被命名为“主菜单”。它区分大小写,并且必须与您在 GameObject.Find() 中键入的内容完全匹配。
      • 尝试做我在编辑中发布的内容。
      • 我知道了:prnt.sc/irnxy7。我在“Logowanie”,我想激活“Glowne 菜单”
      • 创建一个公共引用,将其拖放到编辑器的槽中,然后通过变量访问它,而不是让 Unity 搜索它。
      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      相关资源
      最近更新 更多