如何找到子游戏对象?

27

我想说一些像......

Gameobject.find(child gameobject of specific parent Gameobject)

有人能帮助我吗。 谢谢!


看这个:http://answers.unity3d.com/questions/10417/how-can-i-access-the-children-of-a-transform.html - Imapler
甚至在Transform上还有一个查找函数:Find - T. Kiley
5个回答

56

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

有两种方法可以实现:

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

第二种选项已被弃用,但仍然可用,因此建议使用第一种选项。


4
当我尝试运行这段代码时,遇到一个错误,提示为:“无法将类型 UnityEngine.Transform' 转换为类型 UnityEngine.GameObject"。 - user3952722
7
由于Transform.find("childname")返回的是一个Transform类型,如果你想获取Gameobject,只需在末尾添加.gameObject即可:Transform.find("childname").gameObject - Jay Kazama
我对这个答案进行了user3164248的更改(只是为了避免混淆)。 - demented hedgehog

6
如果你在查找层级中的一个 GameObject,它应该长这样:
transform.Find("head/eyes")
transform.FindChild("head/eyes")

2
谢谢!对我来说,“Find()”调用返回了NULL,我在Unity文档中看到它默认不遍历层次结构(以获取子对象)。使用正斜杠允许您这样做(例如,“ParentName/ChildName/GrandchildName”以获取“GrandchildName”)。 - clamum

5

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

  1. transform.Find("子物体名称")
  2. transform.FindChild("子物体名称")

注意小写t(属性transform,而不是Transform类)。


1
我修改了Kazama的答案,包括这些修复。 - demented hedgehog

4

对于上面提到的transform.FindChild("childname")作为答案的回复,这里需要告知您,transform.FindChild("childname")已经被废弃。

请使用以下方法,这将按预期工作:

transform.Find("childName");

如果您想通过名称查找GameObject的子对象,请使用以下代码:

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

1
你可以通过 GetChild(index of child members) 来完成这个操作。

1
使用 GetChild(index)的坏处是,如果更改对象的顺序,则会失去对它们的引用。 - Jaime Roman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接