【问题标题】:Attach a Child of Prefab on a public Variable or Access the Child of a Prefab在公共变量上附加 Prefab 的子级或访问 Prefab 的子级
【发布时间】:2019-01-29 21:04:45
【问题描述】:

Unity 新编辑器 (2018.3) 引入了嵌套预制件。有谁知道如何将预制件的子代分配给公共变量?

例如:

我有一个带有父游戏对象的绳子,孩子在所有关节上。

我想访问其中1个关节的刚体,所以我设置了一个公共的游戏对象来访问它,但是我只能选择父对象而不是子对象或关节。

有谁知道如何访问预制件的子对象,或者有办法访问预制件的子对象吗?

例如:我的代码是这样的

   public GameObject player;
   Rigidbody2D rb;

void Start()
{
    player = GameObject.FindGameObjectWithTag("Player");
    rb = player.GetComponent<Rigidbody2D>();
    Debug.Log(player.name);
}

我试图使用上述代码访问父游戏对象上的嵌套预制件,但我得到一个空引用异常。我做错了什么?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    我不知道我是否完全理解了这个问题,但我想我可以为您提供一些帮助。如果您想访问 GameObject 或 Joints 组件中的 Child,可以在 here 中进行操作。

    还要注意,您要求的不是 GameObject 是 GameObject[],而是所有标签相同的 GameObjects 的数组。确保您的 GameObject 标签是您所要求的,并将 GameObject 放入一个数组并要求第一个。

    GameObject[] player = GameObject.FindGameObjectsWithTag("Player");
    rb = player[0].transform.GetComponent<RigidBody>();
    

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      所以我意识到我必须以不同的方式对待游戏对象和组件(我很傻)所以我设置了如下代码我能够抓住预制件的孩子

        void Start()
      {
          checkSleeping = false;
          joint = player.transform.Find("Joint 0").gameObject;
          jointRB = joint.GetComponent<Rigidbody2D>();
          Debug.Log("Found Him");
      }
      

      【讨论】:

      • 为什么 Find 不好?
      • 处理器很重,不能作为公共变量引用吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多