includeInactive | 是否在搜索中包含未激活的子游戏对象。 |
T 与类型 T
匹配的组件,如果未找到匹配的组件则返回 null
。
检索指定游戏对象或其任何子对象上类型为 T 的组件的引用。
此方法首先检查其调用的游戏对象,然后使用深度优先搜索向下递归遍历所有子游戏对象,直到找到指定类型 T
的匹配组件。
除非您在调用此方法时将 includeInactive
参数设置为 true
,否则只有活动子游戏对象包含在搜索中,在这种情况下,未激活的子游戏对象也将包含在内。无论此参数如何,始终都会搜索调用该方法的游戏对象。
此方法的典型用法是在对不同于脚本所在的游戏对象的引用上调用它。例如myResults = otherGameObject.GetComponentInChildren<ComponentType>()
但是,如果您在 MonoBehaviour 类内部编写代码,则可以省略前面的游戏对象引用以在脚本附加到的同一游戏对象及其子对象上执行搜索。在这种情况下,您实际上是在调用 Component.GetComponentInChildren,因为脚本本身是一种组件类型,但结果与引用游戏对象本身的结果相同。例如myResults = GetComponentInChildren<ComponentType>()
GetComponentInChildren
仅返回找到的第一个匹配组件,并且不会按定义的顺序检查组件。如果有多个指定类型的组件并且您需要查找特定组件,则应使用 Component.GetComponentsInChildren 并检查返回的组件列表以识别您想要的组件。
要查找附加到其他游戏对象的组件,您需要一个 对该其他游戏对象的引用(或附加到该游戏对象的任何组件)。然后,您可以在该引用上调用 GetComponentInChildren
。
注意:如果您请求的类型是 MonoBehaviour 的派生类型,并且关联的脚本无法加载,则此函数将为该组件返回 `null`。
以下示例获取对引用游戏对象或其任何子对象上的铰链关节组件的引用,如果找到,则设置该铰链关节组件上的属性。
using UnityEngine;
public class GetComponentInChildrenExample : MonoBehaviour { // Disable the spring on the first HingeJoint component found on the referenced GameObject or any of its children
public GameObject objectToCheck;
void Start() { HingeJoint hinge = objectToCheck.GetComponentInChildren<HingeJoint>();
if (hinge != null) { hinge.useSpring = false; } else { // Try again, looking for inactive GameObjects HingeJoint hingeInactive = objectToCheck.GetComponentInChildren<HingeJoint>(true);
if (hingeInactive != null) { hingeInactive.useSpring = false; } } } }
type | 要检索的组件的类型。 |
includeInactive | 是否在搜索中包含未激活的子游戏对象。 |
Component 如果找到,则为匹配类型的组件。
这是此方法的非泛型版本。
此版本的 GetComponentInChildren
不如泛型版本(上面)高效,因此您应仅在必要时使用它。
using UnityEngine;
public class GetComponentInChildrenExample : MonoBehaviour { // Disable the spring on the first HingeJoint component found on the referenced GameObject or any of its children
public GameObject objectToCheck;
void Start() { HingeJoint hinge = gameObject.GetComponentInChildren(typeof(HingeJoint)) as HingeJoint;
if (hinge != null) { hinge.useSpring = false; } else { // Try again, looking for inactive GameObjects HingeJoint hingeInactive = gameObject.GetComponentInChildren(typeof(HingeJoint), true) as HingeJoint;
if (hingeInactive != null) { hingeInactive.useSpring = false; } } } }