Unity 6.3
0 онлайн 62 гостей 3 в системе
Вход

GameObject.GetComponentsInChildren

Declaration

public T[] GetComponentsInChildren();
public T[] GetComponentsInChildren(bool includeInactive);

Параметры

Параметр Описание
includeInactive Включать ли неактивный дочерний объект GameObjects в поиск.

Возвращаемое значение

T[] Массив, содержащий все соответствующие компоненты типа T.

Описание

Получает ссылки на все компоненты типа T на указанном GameObject и любом дочернем GameObject.

Типичное использование этого метода — это вызвать его на ссылке на другой GameObject, чем тот, на котором находится ваш скрипт. Например:

myResults = otherGameObject.GetComponentsInChildren<ComponentType>()

Однако если вы пишете код внутри класса MonoBehaviour, предшествующую ссылку на GameObject можно опустить, чтобы искать в том же GameObject, к которому прикреплён скрипт. В этом случае вы фактически вызываете Component.GetComponentsInChildren потому что сам скрипт является типом компонента, но результат такой же, как если бы вы ссылались на сам GameObject. Например:

myResults = GetComponentsInChildren<ComponentType>()

GetComponentsInChildren проверяет GameObject, на котором она вызвана впервые, затем рекурсивно переходит через все дочерние GameObjects, используя поиск по глубине, пока не найдет соответствующий Компонент типа T не указано.

Только активные дочерние GameObjects включаются в поиск, если только вы не вызываете метод с includeInactive параметр установлен на true, в этом случае включаются также неактивные дочерние GameObjects. GameObject, на котором вызван метод, всегда ищется независимо от этого параметра.

Чтобы найти компоненты, прикрепленные к другим GameObjects, вам нужно ссылка на это другое 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; } } } }

Дополнительные ресурсы: Component, GameObject.GetComponentsInParent

Declaration

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

Параметры

Параметр Описание
результаты Список для получения найденных компонентов.
includeInactive Включать ли неактивный дочерний объект GameObjects в поиск.

Описание

Вариант метода 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; } } } }

Дополнительные ресурсы: Component, GameObject.GetComponentsInParent

Declaration

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

Параметры

Параметр Описание
тип Тип компонента для поиска.
includeInactive Включать ли неактивный дочерний объект GameObjects в поиск.

Возвращаемое значение

Component[] Массив всех найденных компонентов, соответствующих указанному type.

Описание

Нетиповая версия этого метода.

Эта версия GetComponentsInChildren не столь эффективна, как версия Generic (выше), так что вы должны использовать ее только в случае необходимости.