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

GameObject.GetComponentsInChildren

建议修改

成功!

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

关闭

提交失败

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

关闭

取消

切换到手册

声明

public T[] GetComponentsInChildren();

声明

public T[] GetComponentsInChildren(bool includeInactive);

参数

includeInactive 是否在搜索中包含非激活的子 GameObject。

返回值

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

描述

检索指定 GameObject 及其任何子对象上所有类型为 T 的组件的引用。

此方法的典型用法是在对不同于脚本所在 GameObject 的引用上调用它。例如

myResults = otherGameObject.GetComponentsInChildren<ComponentType>()

但是,如果您正在 MonoBehaviour 类中编写代码,则可以省略前面的 GameObject 引用以对脚本所附着的同一 GameObject 执行搜索。在这种情况下,您实际上是在调用 Component.GetComponentsInChildren,因为脚本本身是一种组件类型,但结果与引用 GameObject 本身相同。例如

myResults = GetComponentsInChildren<ComponentType>()

GetComponentsInChildren 首先检查其被调用的 GameObject,然后使用深度优先搜索向下递归遍历所有子 GameObject,直到找到指定类型 T 的匹配组件。

仅包含活动子 GameObject,除非您使用 includeInactive 参数设置为 true 调用该方法,在这种情况下,非活动子 GameObject 也包含在内。无论此参数如何,都会始终搜索调用该方法的 GameObject。

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

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

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

using UnityEngine;

public class GetComponentsInChildrenExample : MonoBehaviour { // Disable the spring on all HingeJoints in the referenced GameObject and its children

public GameObject objectToCheck;

void Start() { HingeJoint[] hingeJoints;

hingeJoints = objectToCheck.GetComponentsInChildren<HingeJoint>();

if (hingeJoints != null) { foreach (HingeJoint joint in hingeJoints) { joint.useSpring = false; } } else { // Try again, looking for inactive GameObjects HingeJoint[] hingesInactive = objectToCheck.GetComponentsInChildren<HingeJoint>(true);

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

声明

public void GetComponentsInChildren(List<T> results);

声明

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

参数

results 用于接收已找到组件的列表。
includeInactive 是否在搜索中包含非激活的子 GameObject。

描述

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

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

using UnityEngine;
using System.Collections.Generic;

public class GetComponentsInChildrenExample : MonoBehaviour { // Disable the spring on all HingeJoints in the referenced GameObject and its children

public GameObject objectToCheck;

void Start() { List<HingeJoint> hingeJoints = new List<HingeJoint>();

objectToCheck.GetComponentsInChildren<HingeJoint>(false, hingeJoints);

if (hingeJoints != null) { foreach (HingeJoint joint in hingeJoints) { joint.useSpring = false; } } else { // Try again, looking for inactive GameObjects List<HingeJoint> hingesInactive = new List<HingeJoint>();

objectToCheck.GetComponentsInChildren<HingeJoint>(true, hingesInactive);

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

声明

public Component[] GetComponentsInChildren(Type type, bool includeInactive = false);

参数

type 要搜索的组件类型。
includeInactive 是否在搜索中包含非激活的子 GameObject。

返回值

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

描述

此方法的非泛型版本。

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