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

Component.GetComponentsInChildren

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

public T[] GetComponentsInChildren();

声明

public T[] GetComponentsInChildren(bool includeInactive);

参数

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

返回值

T[] 包含所有匹配类型为 T 的组件的数组。

描述

获取与指定组件位于同一游戏对象的类型为 T 的所有组件的引用,以及该游戏对象的任何子级。

此方法的典型用法是从 MonoBehaviour 脚本(它本身也是一种组件)中调用它,以查找附加到与该脚本位于同一游戏对象上的其他组件或 MonoBehaviour 的引用,或其子游戏对象。在这种情况下,您可以在没有前导对象的情况下调用该方法。例如

myResults = GetComponentsInChildren<ComponentType>()

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

myResults = otherComponent.GetComponentsInChildren<ComponentType>()

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

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

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

有关 GetComponent 方法系列的其他变体,请参阅 ComponentGameObject 类参考页面。

以下示例获取与脚本位于同一游戏对象或任何子级上的所有铰链关节组件的引用,如果找到,则设置这些组件上的属性。

using UnityEngine;

public class GetComponentsInChildrenExample : MonoBehaviour { public Component[] hingeJoints;

void Start() { hingeJoints = GetComponentsInChildren<HingeJoint>();

foreach (HingeJoint joint in hingeJoints) joint.useSpring = false; } }

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


声明

public void GetComponentsInChildren(List<T> results);

声明

public void GetComponentsInChildren(bool includeInactive, List<T> result);

参数

result 用于返回结果的列表。
results 用于返回结果的列表。
includeInactive 是否在搜索中包含非活动子游戏对象。

描述

GetComponentsInChildren 方法的变体,允许您提供自己的 List 以填充结果。

这使您能够避免为每次调用该方法而分配新的 List 对象。您提供的列表将调整大小以匹配找到的结果数量,并且列表中的任何现有值都将被覆盖。


声明

public Component[] GetComponentsInChildren(Type t, bool includeInactive);

参数

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

返回值

Component[] 匹配指定类型的所有找到组件的数组。

描述

此方法的非泛型版本。

此版本的 GetComponentsInChildren 效率不如泛型版本(上方),因此您应该仅在必要时使用它。