- Attach Component To Component в Unreal Engine
- Параметры Attach Component To Component
- Практический урок в Unreal Engine: прикрепляем компонент оружия к компоненту персонажа при помощи Attach Component To Component
- Actor оружия BP_Pickup_Rifle
- Прикрепляем BP_Weapon_Component к компоненту персонажа функцией Attach Component To Component
Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим и разберём Blueprint-функцию Attach Component To Component, которая в Unreal Engine (UE4, UE5) прикрепляет один компонент к другому.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Attach Component To Component в Unreal Engine
В Unreal Engine функция Attach Component To Component прикрепляет текущий компонент к другому компоненту, а при необходимости — и к конкретному Socket (держателю). В результате устанавливает связь между двумя компонентами, делая один из них дочерним по отношению к другому, обеспечивая тем самым, что дочерний компонент будет перемещаться, вращаться и масштабироваться вместе со своим родителем.
Иначе говоря, Attach Component To Component приводит к тому, что прикрепляемый компонент:
- Следует за родителем — когда родительский компонент меняет свое положение, вращение или масштаб, дочерний компонент автоматически следует за ним, также изменяя своё положение, вращение и масштаб.
- Создаёт иерархию — прикрепление компонентов создаёт иерархическую структуру, которая может быть полезна для управления сложными объектами.
- Находится в локальном пространстве — дочерний компонент будет находиться в локальном пространстве родительского (его координаты будут рассчитываться относительно родительского компонента).
Функция работает только с компонентами класса Scene Component или другими дочерними от него классами, так как для прикрепления компонентов нужны данные по трансформации объектов (координаты, вращение и масштаб), которые доступны только в классах, начиная от компонента сцены.
Attach Component To Component может использоваться, например, для прикрепления камеры от третьего лица или оружия к персонажу. Для прикрепления эффектов к точке удара при создании эффектов взрыва и в прочих похожих ситуациях.
Подробнее узнать о самой концепции компонентов в движке Анрил Энджин Вы можете в статье: Unreal Engine Component.
Параметры Attach Component To Component
Рассмотрим параметры функции Attach Component To Component:
- Target (scene component, по умолчанию Self) — компонент, который нужно прикрепить.
- Parent (scene component) — родительский компонент для прикрепления компонента Target.
- Socket Name (name, по умолчанию None) — Socket родительского компонента (используется для SkeletalMeshComponent). Конкретное место родительского компонента, куда будет прикреплен компонент Target. Необязательный параметр. Если сокет не задан, компонент прикрепится к началу родительского компонента.
- Location Rule (enum) — правила обработки координат при прикреплении. Доступны 3 варианта на выбор:
— Keep Relative (прикреплённый компонент сохраняет свои прежние значения относительных (Relative) координат).
— Keep World (прикреплённый компонент автоматически вычисляет свои новые значения относительных (Relative) координат, чтобы соответствовать текущим мировым (World) координатам).
— Snap to Target (прикреплённый компонент изменяет свои координаты, чтобы прикрепиться непосредственно к родительскому элементу). - Rotation Rule (enum) — правила обработки вращения при прикреплении. Доступны 3 варианта на выбор:
— Keep Relative (прикреплённый компонент сохраняет свои прежние значения относительного (Relative) поворота).
— Keep World (прикреплённый компонент автоматически вычисляет свои новые значения относительного (Relative) поворота, чтобы соответствовать текущему мировому (World) повороту).
— Snap to Target (прикреплённый компонент изменяет свой поворот, чтобы прикрепиться с поворотом родительского элемента). - Scale Rule (enum) — правила обработки масштаба при прикреплении. Доступны 3 варианта на выбор:
— Keep Relative (прикреплённый компонент сохраняет свои прежние значения относительного (Relative) масштаба).
— Keep World (прикреплённый компонент автоматически вычисляет свои новые значения относительного (Relative) масштаба, чтобы соответствовать текущему мировому (World) масштабу).
— Snap to Target (прикреплённый компонент изменяет свой масштаб, чтобы прикрепиться с масштабом родительского элемента). - Weld Simulated Bodies (bool, по умолчанию True) — склеивать или нет симулируемые физические тела. При этом при симуляции физики формы склеенного объекта переносятся в родительский компонент, что может привести к необратимым изменениям, которые сохранятся даже при разъединении компонентов.
- Return Value (bool, возвращаемый параметр) — возвращает значение True, если прикрепление прошло удачно или компонент уже был прикреплён до этого. В противном случае — False.
Практический урок в Unreal Engine: прикрепляем компонент оружия к компоненту персонажа при помощи Attach Component To Component
Данный практический урок мы реализуем через разбор готового кода, который нам поставляется с шаблоном проекта игры от первого лица в Unreal Engine (UE5). Дело в том, что в этом шаблоне уже имеется персонаж, а также оружие, которое мы, непосредственно находясь в игре, можем присоединить к своему персонажу. Это присоединение как раз и реализовано через функцию Attach Component To Component.
Actor оружия BP_Pickup_Rifle
- Итак, для начала откроем Blueprint-класс оружия BP_Pickup_Rifle. Находится он по пути /All/Game/FirstPerson/Blueprints.
- Данный Actor также размещён на сцене. Основное предназначение данного Актора — это взять оружие. То есть, он является поднимаемым предметом.
- Сам Актор состоит из Mesh оружия и SphereCollision (коллизии), которая реагирует на пересечение с игроком BP_FirstPersonCharacter.
Скриншот
Код на BlueprintUE
Если код отображается без связей, нажмите сверху кода на кнопку «Graph»
- Далее по коду нодой Get Children Components получаем массив дочерних элементов у компонента First Person Mesh (Mesh персонажа) и проверяем этот массив на наличие в нём компонента оружия BP_Weapon_Component. Если находим такой компонент, то переменную Character Has Weapon устанавливаем в значение True и заканчиваем цикл For (передаём поток в ноду Break цикла For). Это означает, что персонаж уже имеет оружие и поднять текущее оружие он уже не может.
Скриншот
Код на BlueprintUE
Если код отображается без связей, нажмите сверху кода на кнопку «Graph»
- При окончании цикла перебора массива дочерних компонентов (поток Completed цикла For) переходим к процессу добавления компонента оружия к компоненту Mesh персонажа BP_FirstPersonCharacter. Но перед этим проверяем переменную Character Has Weapon. Продолжаем процесс присоединения только тогда, когда эта переменная имеет значение False, то есть компонента оружия у персонажа до сих пор нет. Добавление компонента производим нодой Add BP_Weapon_Component, которая динамически добавляет к персонажу компонент BP_Weapon_Component в качестве подобъекта (замечу, визуальную составляющую компонента мы еще не присоединили к персонажу, мы просто добавили его в качестве подобъекта). После этого удаляем текущий Актор поднимаемого предмета BP_Pickup_Rifle.
Скриншот
Код на BlueprintUE
Если код отображается без связей, нажмите сверху кода на кнопку «Graph»
Как только процесс дошёл до ноды Add BP_Weapon Component из предыдущего 5 пункта, так сразу в движке Unreal Engine включился в работу компонент BP_Weapon_Component и весь код, который в нём описан, также начал свою работу. Рассмотрим отдельно код пользовательского компонента BP_Weapon_Component. Именно внутри него и происходит визуальное прикрепление компонента оружия к компоненту First Person Mesh (Mesh персонажа) с помощью функции Attach Component To Component.
Прикрепляем BP_Weapon_Component к компоненту персонажа функцией Attach Component To Component
- Откроем Blueprint пользовательского компонента оружия BP_Weapon_Component. В нём располагается обработка двух событий. В рамках темы текущей статьи (функция Attach Component To Component) рассматривать мы будем исключительно код, обрабатывающий событие Event Begin Play, и то только до необходимой нам функции.
- Итак, событие Event Begin Play, находящееся в компоненте оружия, включается в работу ровно в тот момент, когда активируется сам компонент. А компонент, напомню, активируется при вызове функции добавления компонента Add BP_Weapon_Component. Именно при обработке события Event Begin Play и прикрепляется наш компонент оружия к персонажу.
- Чтобы получить Actor персонажа, используем ноду Get Owner, возвращающую Actor владельца текущего компонента оружия.
- Далее тип Actor персонажа приводим к типу BP_FirstPersonCharacter, и из него нодой Get FirstPersonMesh возвращаем компонент Mesh, к которому и нужно прикрепить компонент оружия.
- После чего вызываем функцию Attach Component To Component и настраиваем её параметры:
— Target: указываем Self, то есть текущий компонент оружия, в котором расположен код.
— Parent: указываем компонент, к которому мы хотим присоединить текущий компонент, а это Mesh персонажа.
— Socket Name: указываем значение GripPoint. Если посмотреть Skeletal Mesh данного персонажа (/All/Game/FirstPersonArms/Character/Mesh/SK_Mannequin_Arms_Skeleton), то можно увидеть, что данный сокет находится на кисти правой руки. Это означает, что компонент оружия присоединится не просто к компоненту Mesh, а именно к сокету, находящемуся на кисти правой руки.— Location, Rotation, Scale Rule: везде указываем Snap to Target, чтобы наш компонент оружия присоединился непосредственно к родительскому компоненту, используя значения родительской трансформации.
Скриншот
Код на BlueprintUE
Таким образом, используя функцию Attach Component To Component, можно в игровом движке Unreal Engine (UE, UE5) присоединять один компонент к другому.
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.