【问题标题】:How can I find child gameobject?如何找到子游戏对象?
【发布时间】:2014-09-10 10:55:22
【问题描述】:

我想说一些类似的话..

Gameobject.find(child gameobject of specific parent Gameobject)

谁能帮帮我。 谢谢!

【问题讨论】:

标签: unity3d gameobject


【解决方案1】:

GameObject.Find 将在场景中搜索游戏对象。要从父级搜索游戏对象,请使用 Transform

有两种方法:

  1. transform.Find("childname")
  2. transform.FindChild("childname")

第 2 个选项已弃用,但仍然有效,因此您最好使用第 1 个选项。

【讨论】:

  • 当我尝试这段代码时,我发现了一个错误,例如...“无法转换类型UnityEngine.Transform' to UnityEngine.GameObject”
  • 这是因为Transform.find("childname") 返回了一种Transform。如果要获取游戏对象,只需在末尾添加.gameObject即可:Transform.find("childname").gameObject
  • 我对这个答案进行了 user3164248 的更改(只是为了避免混淆)。
【解决方案2】:

修正 Jay Kazama 的答案。正确答案是:

  1. transform.Find ("childname")
  2. transform.FindChild(“子名”)

使用小 t(属性变换,而不是类变换)。

【讨论】:

  • 我更改了 Kazama 的答案以包含这些修复。
【解决方案3】:

如果你在层次结构中寻找一个游戏对象,它必须是这样的:

transform.Find("head/eyes")
transform.FindChild("head/eyes")

【讨论】:

  • 谢谢! “Find()”调用为我返回 NULL,我在 Unity 文档中看到它默认不遍历层次结构(获取子子级)。使用正斜杠可以做到这一点(例如,“ParentName/ChildName/GrandchildName”得到“GrandchildName”)。
【解决方案4】:

对于上述将transform.FindChild("childname") 声明为答案的答案,这是为了通知您transform.FindChild("childname") 已被弃用。

使用这个,这将按预期工作

transform.Find("childName");

如果你想通过名字找到一个游戏对象的子对象,使用这个,

GameObject head = HeadPanel;    // just for reference
head.transorm.Find("childName").gameObject;

【讨论】:

    【解决方案5】:

    您可以通过 GetChild(子成员索引)

    【讨论】:

    • 使用 GetChild(索引)的坏处是,如果您更改对象的顺序,您将失去对它们的引用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多