includeInactive | 是否在搜索中包含非活动的父级 GameObject。 |
T[] 包含所有匹配类型 T
的组件的数组。
检索指定 GameObject 及其任何父级上所有类型为 T 的组件的引用。
此方法的典型用法是在对与您的脚本所在的 GameObject 不同的 GameObject 的引用上调用它。例如myResults = otherGameObject.GetComponentsInParent<ComponentType>()
但是,如果您在 MonoBehaviour
类中编写代码,则可以省略前面的 GameObject 引用以对与您的脚本附加到的相同 GameObject 执行搜索。在这种情况下,您实际上是在调用 Component.GetComponentsInParent,因为脚本本身是一种组件类型,但结果与您引用 GameObject 本身时相同。例如myResults = GetComponentsInParent<ComponentType>()
GetComponentsInParent
首先检查其调用到的 GameObject,然后递归向上遍历每个父级 GameObject,直到找到指定类型 T
的匹配组件。
只有活动的父级 GameObject 包含在搜索中,除非您使用 includeInactive
参数设置为 true
调用该方法,在这种情况下,非活动的父级 GameObject 也将包含在内。无论此参数如何,都始终搜索调用该方法的 GameObject。
要查找附加到其他 GameObject 的组件,您需要对该其他 GameObject 的引用(或附加到该 GameObject 的任何组件)。然后,您可以在该引用上调用 GetComponentsInParent
。
注意:如果您请求的类型是 MonoBehaviour 的派生类型,并且关联的脚本无法加载,则此函数将为该组件返回 `null`。
以下示例获取对与脚本所在的相同 GameObject 或其任何父级上的所有铰链关节组件的引用,如果找到,则设置这些组件上的属性。
using UnityEngine;
public class GetComponentsInParentExample : MonoBehaviour { // Disable the spring on all HingeJoints in the referenced GameObject and its parents
public GameObject objectToCheck;
void Start() { HingeJoint[] hingeJoints;
hingeJoints = objectToCheck.GetComponentsInParent<HingeJoint>();
if (hingeJoints != null) { foreach (HingeJoint joint in hingeJoints) { joint.useSpring = false; } } else { // Try again, looking for inactive GameObjects HingeJoint[] hingesInactive = objectToCheck.GetComponentsInParent<HingeJoint>(true);
foreach (HingeJoint joint in hingesInactive) { joint.useSpring = false; } } } }
includeInactive | 是否在搜索中包含非活动的子级 GameObject。 |
results | 用于返回结果的列表。 |
GetComponentsInParent
方法的一种变体,它允许您提供自己的列表来填充结果。
这使您可以避免为每次调用该方法分配新的列表对象。您提供的列表将调整大小以匹配找到的结果数量,并且列表中的任何现有值都将被覆盖。
using UnityEngine; using System.Collections.Generic;
public class GetComponentsInParentExample : MonoBehaviour { // Disable the spring on all HingeJoints in the referenced GameObject and its parents
public GameObject objectToCheck;
void Start() { List<HingeJoint> hingeJoints = new List<HingeJoint>();
objectToCheck.GetComponentsInParent<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.GetComponentsInParent<HingeJoint>(true, hingesInactive);
foreach (HingeJoint joint in hingesInactive) { joint.useSpring = false; } } } }
type | 要搜索的组件类型。 |
includeInactive | 是否在搜索中包含非活动的父级 GameObject。 |
Component[] 匹配指定类型的所有找到的组件的数组。
此方法的非泛型版本。
此版本的 GetComponentsInChildren 的效率不如泛型版本(以上),因此您应仅在必要时使用它。