- Attach Actor To Actor в Unreal Engine
- Функция Attach Actor To Component
- Параметры функций Attach Actor
- Практический урок в Unreal Engine: прикрепляем Акторы друг к другу функциями Attach Actor To Actor (Component)
- Функция Attach Actor To Actor
- Функция Attach Actor To Component
- Дополнительные функции
- Get Attach Parent Actor
- Get Attach Parent Socket Name
- Get Attached Actors
Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим и разберём Blueprint-функции Attach Actor To Actor и Attach Actor To Component, которые в Unreal Engine (UE4, UE5) прикрепляют один Актор к другому Актору или его компоненту.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Attach Actor To Actor в Unreal Engine
В Unreal Engine функция Attach Actor To Actor используется для прикрепления одного Актора (Actor) к другому. Это позволяет создавать иерархии Акторов, где один Актор будет следовать за другим в пространстве и времени.
Функция доступна как в коде C++, так и в Blueprint. Она управляет тем, как один Актор прикрепляется к другому, включая параметры трансформации (координаты местоположения, поворот и масштаб) и правила этой привязки. Само прикрепление реализуется путём привязки Root component (корневого компонента) текущего Актора к указанному Актору, а при необходимости и через именованный сокет (точке привязки).
Attach Actor To Actor используется, к примеру, для прикрепления оружия, инструментов или элементов одежды к персонажу. В общем, для прикрепления объектов, которые должны двигаться вместе с основным Актором.
Функция Attach Actor To Component
Функция Attach Actor To Component практически полный аналог предыдущей функции Attach Actor To Actor, отличаясь от неё тем, что прикрепляется она не к Актору, а к конкретному указанному компоненту (класса Scene Component и выше). То есть, во втором входящем параметре у неё вместо Parent Actor находится параметр Parent, требующий ссылку на конкретный компонент.
Если не брать во внимание параметр Socket, доступный в обеих функциях, то использование Attach Actor To Component даст более точный вариант прикрепления за счёт указания трансформации не всего Актора в целом, а конкретного компонента в нём.
Что такое компоненты в движке Анрил Энджин, их виды, классы и особенности Вы можете узнать в отдельной статье: Unreal Engine Components.
Параметры функций Attach Actor
- Target (Actor, по умолчанию Self) — Актор, который нужно прикрепить.
- Parent Actor (Actor) — родительский Актор для прикрепления Актора Target (для Attach Actor To Actor) / Parent (scene component) — родительский компонент для прикрепления Актора Target (для Attach Actor To Component).
- Socket Name (name, по умолчанию None) — Socket родительского Актора (используется для SkeletalMeshComponent). Конкретное место родительского Актора (точка привязки), куда будет прикреплен Актор Target (его Root Component). Необязательный параметр.
- Location Rule (enum) — правила обработки координат при прикреплении. Доступны 3 варианта на выбор:
— Keep Relative (Актор сохраняет свои прежние значения относительных (Relative) координат).
— Keep World (Актор сохраняет свои прежние значения мировых (World) координат).
— Snap to Target (Актор игнорирует все свои прежние координаты, прикрепляясь непосредственно к родительскому элементу). - Rotation Rule (enum) — правила обработки вращения при прикреплении. Доступны 3 варианта на выбор:
— Keep Relative (Актор сохраняет свои прежние значения относительного (Relative) поворота).
— Keep World (Актор сохраняет свои прежние значения мирового (World) поворота).
— Snap to Target (Актор игнорирует все свои прежние значения поворота, прикрепляясь непосредственно к родительскому элементу, используя его поворот). - Scale Rule (enum) — правила обработки масштаба при прикреплении. Доступны 3 варианта на выбор:
— Keep Relative (Актор сохраняет свои прежние значения относительного (Relative) масштаба).
— Keep World (Актор сохраняет свои прежние значения мирового (World) масштаба).
— Snap to Target (Актор игнорирует все свои прежние значения масштаба, прикрепляясь непосредственно к родительскому элементу, используя его масштаб). - Weld Simulated Bodies (bool, по умолчанию True) — склеивать или нет симулируемые физические тела. При этом при симуляции физики формы склеенного объекта переносятся в родительский Актор, что может привести к необратимым изменениям, которые сохранятся даже при разъединении компонентов.
- Return Value (bool, возвращаемый параметр) — возвращает значение True, если прикрепление прошло удачно. В противном случае — False.
Практический урок в Unreal Engine: прикрепляем Акторы друг к другу функциями Attach Actor To Actor (Component)
Рассмотрим на конкретном практическом примере как работают обе функции. Для этого, откроем стандартный шаблон проекта игры в Unreal Engine (UE5) от третьего лица и создадим в нём Actor, который будем прикреплять к персонажу BP_ThirdPersonCharacter.
Функция Attach Actor To Actor
- Создадим в Анрил Энджин Blueprint-класс Actor с именем BP_Actor. Для визуального удобства добавим ему компонент Sphere, уменьшим его масштаб. Также обязательно изменим у него Collision Presets для взаимодействия с персонажем. Для этого перейдём в настройки коллизии у компонента Sphere: Details / Collision / Collision Presets и изменим пресет на OverlapAll, чтобы Актор регистрировал события пересечения с персонажем.
- Откроем в BP_Actor вкладку Event Graph и по вызову события пересечения Event Actor Begin Overlap объект Actor, который пересёк текущего Актора, при помощи Cast преобразуем в тип персонажа BP_ThirdPersonCharacter.
- Далее функцией Attach Actor To Actor прикрепим текущий Актор к персонажу. В параметр Parent которой, подадим Актор этого персонажа. А параметры трансформации настроим на значение Snap to Target.
Скриншот
Код на BlueprintUE
Если код отображается без связей, нажмите сверху кода на кнопку «Graph»
В результате при пересечении персонажа с коллизией BP_Actor функция AttachActorToActor прикрепит текущий Актор в центр персонажа:
Функция Attach Actor To Component
- Исправим предыдущий код, заменив функцию AttachActorToActor на AttachActorToComponent. В параметр Parent которой, подадим ссылку на компонент Mesh персонажа BP_ThirdPersonCharacter.
Скриншот
Код на BlueprintUE
Если код отображается без связей, нажмите сверху кода на кнопку «Graph»
- В результате функция AttachActorToComponent прикрепит BP_Actor к началу координат компонента Mesh персонажа.
- Теперь попробуем к параметрам AttachActorToComponent добавить сокет (конкретную точку прикрепления). Сам сокет создаётся в Skeletal Mesh. Поэтому перейдём в Skeletal Mesh персонажа по пути /All/Game/Characters/Mannequins/Meshes/. Далее откроем ассет SK_Mannequin. В скелете персонажа найдём косточку кисти pinky_metacarpal_l и добавим к ней сокет handSocket.
- Далее укажем сокет handSocket в параметре AttachActorToComponent.
Скриншот
Код на BlueprintUE
Если код отображается без связей, нажмите сверху кода на кнопку «Graph»
- В результате функция AttachActorToComponent с указанным сокетом handSocket прикрепит BP_Actor к левой кисти персонажа.
Дополнительные функции
Кратко разберём дополнительные функции, которые так или иначе имеют отношение к функциям Attach Actor в Unreal Engine.
Get Attach Parent Actor
Функция Get Attach Parent Actor возвращает родительский Actor, к которому прикреплён текущий Актор.
Параметры:
- Target (Actor, по умолчанию Self) — текущий Актор.
- Return Value (Actor) — возвращаемое значение. Если Актор Target присоединён к родительскому Актору, то возвращается родительский Actor. В противном случае возвращается пустое значение Nullptr.
Если мы воспользуемся тем примером, который рассматривали выше в практическом уроке, и в Акторе BP_Actor на событии Event Tick разместим нижеследующий код, то функция Get Attach Parent Actor возвратит нам родительский Актор, к которому BP_Actor был присоединен, а это BP_ThirdPersonCharacter.
Get Attach Parent Socket Name
Функция Get Attach Parent Socket Name возвращает имя сокета (точки крепежа) родительского актора, если таковой имеется.
Параметры:
- Target (Actor, по умолчанию Self) — текущий Актор.
- Return Value (Name) — возвращаемое значение. Если Актор Target присоединён к родительскому Актору через сокет, то возвращается имя этого сокета. В противном случае возвращается пустое значение None.
Если мы воспользуемся тем примером, который рассматривали выше в практическом уроке, и в Акторе BP_Actor на событии Event Tick разместим нижеследующий код, то функция Get Attach Parent Socket Name возвратит нам имя сокета родительского Актора, к которому BP_Actor был присоединен, а это handSocket.
Get Attached Actors
Функция Get Attached Actors возвращает массив всех Акторов, прикреплённых к текущему Актору.
Используется, когда необходимо узнать, какие объекты связаны с данным Актором и как они организованы в иерархии.
Параметры:
- Target (Actor, по умолчанию Self) — текущий Актор.
- Reset Array (bool, по умолчанию True) — если установлено значение True, массив будет очищен перед добавлением новых элементов. Если False, новые элементы будут добавлены к уже существующим в массиве.
- Recursively Include Attached Actors (bool, по умолчанию False) — если установлено значение True, функция также включит Акторов, которые прикреплены рекурсивно (то есть Акторов, прикрепленных к уже прикрепленным Акторам). Если False — в итоговый массив будут включены только непосредственно прикрепленные Акторы.
- Out Actors (Actor Array) — возвращаемое значение. Массив всех Акторов, прикреплённых к текущему Актору.
Если мы воспользуемся тем примером, который рассматривали выше в практическом уроке, и в персонаже BP_ThirdPersonCharacter разместим нижеследующий код, то функция Get Attached Actors возвратит нам массив всех Акторов, присоединённых к персонажу. В нашем случае, после пересечения персонажа с Актором BP_Actor, у персонажа будет один дочерний Актор — BP_Actor.
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.