Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим Blueprint-функции Get Children Components, Get Child Component и Get Num Children Components, доступные в классе компонента сцены Unreal Engine (UE4, UE5).
При разборе данных функций мы будем использовать шаблон проекта игры от первого лица игрового движка Анрил Энджин (UE5), а конкретно блюпринт BP_FirstPersonCharacter по пути /All/Game/FirstPerson/Blueprints.
Также, так как разбираемые функции доступны в классе компонента сцены, то предварительно в отдельной статье можете изучить саму концепцию компонентов — Unreal Engine Components.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Get Children Components
В Unreal Engine функция Get Children Components возвращает массив всех дочерних компонентов, прикрепленных к текущему компоненту. Иначе говоря, функция позволяет получить доступ ко всем компонентам, которые прикреплены к текущему компоненту, включая как прямых дочерних элементов, так и потомков потомков (всех дочерних компонентов в иерархии ниже).
По умолчанию функция не возвращает все компоненты, находящиеся в иерархии. Она возвращает только дочерние компоненты первого уровня. Чтобы функция возвращала рекурсивно абсолютно все дочерние элементы дерева иерархии, необходимо параметр Include All Descendants поменять на значение True.
Функция доступна только для компонентов класса Scene Component и других дочерних от него классов.
Обычно функцию Get Children Components используют для обхода иерархии компонентов и выполнения действий с каждым из дочерних компонентов. Например, её можно использовать для изменения свойств дочерних компонентов.
Параметры:
- Target (scene component, по умолчанию Self) — текущий компонент.
- Include All Descendants (bool, по умолчанию False) — если установлено значение True, функция возвращает рекурсивно абсолютно все дочерние компоненты по всей иерархии вниз. Если значение False — возвращает только дочерние компоненты первого уровня.
- Children (array scene component) — возвращаемый параметр. Возвращается массив всего дерева дочерних компонентов, к которым присоединён компонент из параметра Target.
Итак, для примера использования функции откроем Blueprint-класс персонажа BP_FirstPersonCharacter и по событию Event Tick запустим нижеследующий код. Где на каждом тике функция Get Children Components будет возвращать массив дочерних компонентов для компонента камеры First Person Camera. Затем при помощи перебора массива циклом For распечатаем названия каждого компонента из массива функцией Print String. Также у функции Get Children Components установим параметр Include All Descendants в значение True, чтобы мы могли получить список абсолютно всех дочерних компонентов по рекурсии.
Скриншот
Код на BlueprintUE
В результате при запуске игры, функция Get Children Components возвратит список аж из 3 дочерних компонентов: First Person Mesh, Draw Frustum и Static Mesh Matinee Cam. Хотя если посмотреть в блюпринт персонажа, то у компонента камеры First Person Camera всего 1 дочерний компонент — First Person Mesh. На самом деле всё правильно, просто компонент камеры при своей работе загружает в фоновом режиме еще 2 дочерних компонента для отображения усечённого конуса обзора камеры и Mesh Matinee Cam.
Далее, если в игре присоединить оружие к персонажу (а оружие в данном шаблоне реализовано как компонент BP_Weapon_Component, который присоединяется к компоненту First Person Mesh), то теперь функция Get Children Components возвратит уже 4 компонента. Хотя компонент оружия не является прямым дочерним компонентом камеры First Person Camera. И это тоже правильно, так как в Get Children Components мы установили параметр Include All Descendants в значение True, чтобы получить список абсолютно всех дочерних компонентов по рекурсии.
Get Child Component
Функция Get Child Component в отличие от Get Children Components возвращает не массив дочерних элементов, а конкретный дочерний компонент по его порядковому номеру из перечня дочерних элементов. Функция доступна только для компонентов класса Scene Component и других дочерних от него классов.
Параметры:
- Target (scene component, по умолчанию Self) — текущий компонент.
- Child Index (int) — индекс (номер элемента) в перечне дочерних элементов.
- Return Value (scene component) — возвращаемый параметр. Дочерний компонент для текущего компонента из параметра Target, выбранный по номеру индекса.
Для примера использования функции, как и выше, откроем Blueprint персонажа BP_FirstPersonCharacter и по событию Event Tick запустим нижеследующий код. Где функция Get Child Component с параметром Child Index = 1, возвратит один дочерний компонент Draw Frustum (напоминаю, это системный компонент для камеры, загружаемый в фоновом режиме) под индексом 1.
Скриншот
Код на BlueprintUE
Get Num Children Components
Blueprint-функция Get Num Children Components в Unreal Engine возвращает количество непосредственных дочерних компонентов, прикрепленных к текущему компоненту. Функция полезна, когда имеется необходимость знать, сколько дочерних компонентов имеет текущий компонент, без необходимости обхода всех дочерних элементов. Она используется, например, для определения размера массива при хранении дочерних компонентов или для определения размера цикла, когда необходимо перебрать все дочерние компоненты.
Функция доступна только для компонентов класса Scene Component и других дочерних от него классов.
Важно еще раз отметить, что функция Get Num Children Components не считает всех потомков в иерархии, она возвращает только число прямых дочерних компонентов.
Параметры:
- Target (scene component, по умолчанию Self) — текущий компонент.
- Return Value (int) — возвращаемый параметр. Возвращает целое число, которое представляет собой количество дочерних компонентов, непосредственно прикрепленных к текущему компоненту из параметра Target.
Для примера использования функции, опять же, как и выше, откроем Blueprint-класс персонажа BP_FirstPersonCharacter и по событию Event Tick запустим нижеследующий код. Где функция Get Num Children Components возвратит количество дочерних элементов, равное 3. Даже несмотря на то, что персонаж поднимет оружие, количество всё-равно останется равным 3, так как Get Num Children Components возвращает количество дочерних компонентов только первого уровня (без рекурсии).
Скриншот
Код на BlueprintUE
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.