Blueprint-функция Attach Actor To Actor (Component) в Unreal Engine

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим и разберём Blueprint-функции Attach Actor To Actor и Attach Actor To Component, которые в Unreal Engine (UE4, UE5) прикрепляют один Актор к другому Актору или его компоненту.

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Blueprint-функция Attach Actor To Actor (Component) в Unreal Engine
Blueprint-функция Attach Actor To Actor (Component) в Unreal Engine

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

  1. Создадим в Анрил Энджин Blueprint-класс Actor с именем BP_Actor. Для визуального удобства добавим ему компонент Sphere, уменьшим его масштаб. Также обязательно изменим у него Collision Presets для взаимодействия с персонажем. Для этого перейдём в настройки коллизии у компонента Sphere: Details / Collision / Collision Presets и изменим пресет на OverlapAll, чтобы Актор регистрировал события пересечения с персонажем.

    Добавим в BP_Actor компонент Sphere, изменим масштаб и пресет коллизии
    Добавим в BP_Actor компонент Sphere, изменим масштаб и пресет коллизии
  2. Откроем в BP_Actor вкладку Event Graph и по вызову события пересечения Event Actor Begin Overlap объект Actor, который пересёк текущего Актора, при помощи Cast преобразуем в тип персонажа BP_ThirdPersonCharacter.
  3. Далее функцией Attach Actor To Actor прикрепим текущий Актор к персонажу. В параметр Parent которой, подадим Актор этого персонажа. А параметры трансформации настроим на значение Snap to Target.

    Скриншот

    Прикрепляем текущий Актор к Актору Персонажа функцией Attach Actor To Actor
    Прикрепляем текущий Актор к Актору Персонажа функцией AttachActorToActor

    Код на BlueprintUE

    Если код отображается без связей, нажмите сверху кода на кнопку «Graph» Если код отображается без связей, нажмите сверху кода на кнопку "Graph"


В результате при пересечении персонажа с коллизией BP_Actor функция AttachActorToActor прикрепит текущий Актор в центр персонажа:

Результат прикрепления Актора функцией AttachActorToActor
Результат прикрепления Актора функцией AttachActorToActor

Функция Attach Actor To Component

  1. Исправим предыдущий код, заменив функцию AttachActorToActor на AttachActorToComponent. В параметр Parent которой, подадим ссылку на компонент Mesh персонажа BP_ThirdPersonCharacter.

    Скриншот

    Прикрепляем текущий Актор к компоненту Актора Персонажа функцией AttachActorToComponent
    Прикрепляем текущий Актор к компоненту Актора Персонажа функцией AttachActorToComponent

    Код на BlueprintUE

    Если код отображается без связей, нажмите сверху кода на кнопку «Graph» Если код отображается без связей, нажмите сверху кода на кнопку "Graph"
  2. В результате функция AttachActorToComponent прикрепит BP_Actor к началу координат компонента Mesh персонажа.

    Результат прикрепления Актора функцией AttachActorToComponent
    Результат прикрепления Актора функцией AttachActorToComponent
  3. Теперь попробуем к параметрам AttachActorToComponent добавить сокет (конкретную точку прикрепления). Сам сокет создаётся в Skeletal Mesh. Поэтому перейдём в Skeletal Mesh персонажа по пути /All/Game/Characters/Mannequins/Meshes/. Далее откроем ассет SK_Mannequin. В скелете персонажа найдём косточку кисти pinky_metacarpal_l и добавим к ней сокет handSocket.

    Добавляем для левой кисти скелета персонажа сокет handSocket
    Добавляем для левой кисти скелета персонажа сокет handSocket
  4. Далее укажем сокет handSocket в параметре AttachActorToComponent.

    Скриншот

    Добавим имя сокета handSocket в AttachActorToComponent
    Добавим имя сокета handSocket в AttachActorToComponent

    Код на BlueprintUE

    Если код отображается без связей, нажмите сверху кода на кнопку «Graph» Если код отображается без связей, нажмите сверху кода на кнопку "Graph"
  5. В результате функция AttachActorToComponent с указанным сокетом handSocket прикрепит BP_Actor к левой кисти персонажа.

    Результат прикрепления Актора функцией AttachActorToComponent с указанным сокетом handSocket
    Результат прикрепления Актора функцией AttachActorToComponent с указанным сокетом handSocket

Дополнительные функции

Кратко разберём дополнительные функции, которые так или иначе имеют отношение к функциям Attach Actor в Unreal Engine.

Get Attach Parent Actor

Функция 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 Actor возвращает родительский Актор BP_ThirdPersonCharacter
Функция Get Attach Parent Actor возвращает родительский Актор BP_ThirdPersonCharacter

Get Attach Parent Socket Name

Функция 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 Attach Parent Socket Name возвращает имя сокета родительского Актора - handSocket
Функция Get Attach Parent Socket Name возвращает имя сокета родительского Актора — handSocket

Get Attached Actors

Функция 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.

Функция Get Attached Actors возвращает массив прикреплённых Акторов, в нашем случае дочерний Актор один - BP_Actor
Функция Get Attached Actors возвращает массив прикреплённых Акторов, в нашем случае дочерний Актор один — BP_Actor

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Оцените статью
( 2 оценки, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.