版本: Unity 6 (6000.0)
语言英语
  • C#

Component.GetComponentInChildren

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每一项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public T GetComponentInChildren(bool includeInactive = false);

参数

includeInactive 是否将非活动子游戏对象包含在搜索中。

返回值

T 与类型 T 相匹配的组件,如果未找到组件,则为 null

描述

获取对指定组件所在游戏对象或其任何子游戏对象上的类型 T 的组件的引用。

此方法的典型用法是从 MonoBehaviour 脚本(本身也是一种组件类型)调用它,以查找附加到与该脚本相同游戏对象或其子游戏对象的组件或 MonoBehaviour 的引用。在这种情况下,您可以不指定任何前缀对象来调用该方法。例如

myResults = GetComponentInChildren<ComponentType>()

您还可以对不同组件的引用调用此方法,该组件可能附加到不同的游戏对象。在这种情况下,将搜索该组件所附加的游戏对象及其子对象。例如

myResults = otherComponent.GetComponentInChildren<ComponentType>()

此方法首先检查调用它的游戏对象,然后使用深度优先搜索递归向下遍历所有子游戏对象,直到找到指定类型 T 的匹配组件。

除非您在设置 includeInactive 参数为 true 的情况下调用该方法,否则只有活动子游戏对象包含在搜索中,在这种情况下,非活动子游戏对象也包含在内。调用该方法的游戏对象始终会被搜索,无论此参数如何。

注意:GetComponentInChildren 仅返回找到的第一个匹配组件,并且在任何单个游戏对象上检查组件的顺序未定义。因此,如果在任何单个游戏对象上可能有多个指定类型的匹配项,并且您需要找到特定的匹配项,则应使用 Component.GetComponentsInChildren 并检查返回的组件列表以识别您想要的组件。

要查找附加到其他游戏对象的组件,您需要一个对该其他游戏对象的引用(或附加到该游戏对象的任何组件)。然后,您可以在该引用上调用 GetComponentInChildren

请参阅 ComponentGameObject 类引用页面,了解 GetComponent 方法系列的其他变体。

以下示例获取对与脚本相同游戏对象或其任何子游戏对象上的铰链关节组件的引用,如果找到,则设置该铰链关节组件上的属性。

using UnityEngine;

public class GetComponentInChildrenExample : MonoBehaviour { void Start() { HingeJoint hinge = GetComponentInChildren<HingeJoint>();

if (hinge != null) { hinge.useSpring = false; } else { // Try again by including inactive GameObjects. hinge = GetComponentInChildren<HingeJoint>(true);

if (hinge != null) hinge.useSpring = false; } } }

注意:如果请求的类型是 MonoBehaviour 的派生类型,并且关联的脚本无法加载,则此函数将为该组件返回 `null`。


声明

public Component GetComponentInChildren(Type t, bool includeInactive);

声明

public Component GetComponentInChildren(Type t);

参数

t 要搜索的组件类型。
includeInactive 是否将非活动子游戏对象包含在搜索中。

返回值

Componenttype 相匹配的组件,如果未找到组件,则为 null

描述

这是此方法的非泛型版本。

此版本的 GetComponentInChildren 不如泛型版本(上面)高效,因此只有在必要时才应使用它。

using UnityEngine;

public class GetComponentInChildrenExample : MonoBehaviour { void Start() { HingeJoint hinge = GetComponentInChildren(typeof(HingeJoint)) as HingeJoint;

if (hinge != null) { hinge.useSpring = false; } else { // Try again by including inactive GameObjects. hinge = GetComponentInChildren(typeof(HingeJoint), true) as HingeJoint;

if (hinge != null) hinge.useSpring = false; } } }