GameObject.GetComponentInChildren
Declaration
public T GetComponentInChildren(bool includeInactive = false);Параметры
| Параметр | Описание |
|---|---|
| includeInactive | Включать ли неактивный дочерний объект GameObjects в поиск. |
Возвращаемое значение
T Компонент соответствующего типа T, в противном случае null, если соответствующий Компонент не найден.
Описание
Получает ссылку на компонент типа T на указанном GameObject или любом дочернем GameObject.
Этот метод проверяет GameObject, на котором он вызывается первым, затем рекурсивно переходит ко всем дочерним GameObjects, используя поиск по глубине, пока не найдет соответствующий Компонент указанного типа T.
Только активные дочерние GameObjects включаются в поиск, если только вы не вызываете метод с includeInactive параметр установлен на true, в этом случае включаются также неактивные дочерние GameObjects. GameObject, на котором вызван метод, всегда ищется независимо от этого параметра.
Типичное использование этого метода — это вызвать его на ссылке на другой GameObject, чем тот, на котором находится ваш скрипт. Например:myResults = otherGameObject.GetComponentInChildren<ComponentType>()
Однако если вы пишете код внутри класса MonoBehaviour, предшествующую ссылку на GameObject можно опустить, чтобы искать в том же GameObject, к которому прикреплён скрипт, и в его потомках. В этом случае вы фактически вызываете Component.GetComponentInChildren потому что сам скрипт является типом компонента, но результат такой же, как если бы вы ссылались на сам GameObject. Например:myResults = GetComponentInChildren<ComponentType>()GetComponentInChildren возвращает только первый найденный соответствующий компонент, и компоненты не проверяются в определенном порядке. Если есть несколько компонентов указанного типа и вам нужно найти конкретный, вы должны использовать Component.GetComponentsInChildren и проверить список возвращенных компонентов, чтобы определить тот, который вы хотите.
Чтобы найти компоненты, прикрепленные к другим GameObjects, вам нужно ссылка на это другое GameObject (или любой компонент, прикрепленный к этому GameObject). Затем вы можете вызвать GetComponentInChildren на эту ссылку.
Примечание: Если запрашиваемый тип является производным от MonoBehaviour и связанный с ним скрипт не может быть загружен, то эта функция возвратит `null` для этого компонента.
В следующем примере получается ссылка на компонент шарнирного соединения на ссылке GameObject или на любом из его дочерей, и если она найдена, устанавливается свойство на этом компоненте шарнирного соединения.
using UnityEngine;
public class GetComponentInChildrenExample : MonoBehaviour { // Disable the spring on the first HingeJoint component found on the referenced GameObject or any of its children
public GameObject objectToCheck;
void Start() { HingeJoint hinge = objectToCheck.GetComponentInChildren<HingeJoint>();
if (hinge != null) { hinge.useSpring = false; } else { // Try again, looking for inactive GameObjects HingeJoint hingeInactive = objectToCheck.GetComponentInChildren<HingeJoint>(true);
if (hingeInactive != null) { hingeInactive.useSpring = false; } } } }
Дополнительные ресурсы: Component, GameObject.GetComponents
Declaration
public Component GetComponentInChildren(Type type);public Component GetComponentInChildren(Type type, bool includeInactive);Параметры
| Параметр | Описание |
|---|---|
| тип | Тип извлекаемого компонента. |
| includeInactive | Включать ли неактивный дочерний объект GameObjects в поиск. |
Возвращаемое значение
Компонент Компонент соответствующего типа, если таковой найден.
Описание
Это нетиповая версия данного метода.
Эта версия GetComponentInChildren не столь эффективна, как версия Generic (выше), так что вы должны использовать ее только в случае необходимости.
using UnityEngine;
public class GetComponentInChildrenExample : MonoBehaviour { // Disable the spring on the first HingeJoint component found on the referenced GameObject or any of its children
public GameObject objectToCheck;
void Start() { HingeJoint hinge = gameObject.GetComponentInChildren(typeof(HingeJoint)) as HingeJoint;
if (hinge != null) { hinge.useSpring = false; } else { // Try again, looking for inactive GameObjects HingeJoint hingeInactive = gameObject.GetComponentInChildren(typeof(HingeJoint), true) as HingeJoint;
if (hingeInactive != null) { hingeInactive.useSpring = false; } } } }
Дополнительные ресурсы: Component, GameObject.GetComponents