Blueprint-функция Add Actor World Rotation в Unreal Engine

Приветствую, друзья, с Вами Будуев Антон. В данной статье мы разберем, как добавить Актору плавное вращение в мировых координатах с помощью Blueprint-функции Add Actor World Rotation в Unreal Engine (UE4, UE5).

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

Add Actor World Rotation в Unreal Engine

Функция Add Actor World Rotation в Unreal Engine (UE4, UE5)
Функция Add Actor World Rotation в Unreal Engine (UE4, UE5)

В Unreal Engine функция Add Actor World Rotation добавляет дельту вращения к текущему повороту Актора в мировых координатах, не учитывая его родительскую иерархию. В отличие от функций, работающих с локальными или относительными системами координат, эта функция добавляет вращение вокруг осей X, Y, Z непосредственно в глобальной системе координат мира.

Фактически же функция добавляет вращение для Root Component этого Актора (его корневого компонента).

Функция доступна для блюпринтов класса Actor (или его производного класса) и используется в том случае, когда необходимо создать простое ровное вращение объекта вокруг осей мировой системы координат.

Мировая система координат

Как уже говорилось выше, Add Actor World Rotation в Анрил Энджин добавляет дельту вращения Актору в мировых координатах. Но что это значит, в мировых?

Всего в Unreal Engine для любого Актора доступно 3 системы координат:

  • мировая,
  • относительная (родительская),
  • локальная.

На рисунке ниже представлены 2 Актора. Зелёный Актор — постамент для персонажа. И второй Актор — схематичный персонаж. Причём персонаж подсоединён к Актору постамента как дочерний элемент. Так вот, если рассматривать ситуацию с точки зрения Актора персонажа, то у него будут 3 системы координат: локальная — это его собственные оси, относительная — оси его родителя и мировая — оси игрового мира.

Мировая (World), относительная (Relative) и локальная (Local) системы координат в Unreal Engine (UE4, UE5)
Мировая (World), относительная (Relative) и локальная (Local) системы координат в Unreal Engine (UE4, UE5)

И, как бы ни был развёрнут сам объект Актора относительно родительского элемента (конечно, если у него есть родитель в иерархии), функция Add Actor World Rotation в любом случае всегда будет вращать объект по осям XYZ именно мировой системы.

Параметры функции Add Actor World Rotation

  • Target (Actor, по умолчанию Self) — текущий Актор, для которого необходимо добавить дельту вращения.
  • Delta Rotation (rotator, по умолчанию X 0,0; Y 0,0; Z 0,0) — ротатор, представляющий дельту, которая будет добавлена к текущему вращению в рамках мировой системы координат.
  • Sweep (bool, по умолчанию False) — необязательный параметр, который можно использовать для проверки столкновений при вращении Актора. Если установлено значение True, то вращение будет происходить с учетом столкновений с другими объектами. В случае возникновения такого события, вращение остановится, а информация о столкновении будет возвращена в параметре Sweep Hit Result. При значении False столкновения текущего Актора с любыми объектами будут проигнорированы. Внимание! На момент написания статьи для версии Unreal Engine 5.4 и ниже данный параметр не работает со всеми функциями изменения вращения.
  • Teleport (bool, по умолчанию False) — параметр, определяющий, как будет перемещаться физика Актора. При значении True физика телепортируется в новые координаты в том же состоянии, в каком она была до вращения Актора. При значении False физика будет обрабатывать само вращение, из-за чего (при быстром повороте) могут возникнуть артефакты физики (неправильные, нереалистичные расчёты).
  • Sweep Hit Result (structure) — возвращаемый параметр. Структура, возвращающая результаты столкновения Актора с другим объектом при включенной опции Sweep. Так как структура сложная, её можно разделить нодой Break Hit Result.

Rotator (ротатор) — это структура, описывающая вращение объекта в трёхмерном пространстве. Она состоит из трёх значений:
— Roll: поворот вокруг оси X (крен).
— Pitch: поворот вокруг оси Y (наклон вверх/вниз).
— Yaw: поворот вокруг оси Z (поворот влево/вправо).

Другие функции изменения вращения Актора

В Unreal Engine имеются и другие Blueprint-функции, предназначенные для изменения вращения Актора. Давайте кратко обсудим, чем они друг от друга отличаются.

  • Set Actor Rotation — устанавливает новое значение поворота Актора в мировой системе координат.
  • Set Actor Relative Rotation — устанавливает новое значение поворота Актора относительно родительских координат.
  • Add Actor Local Rotation — добавляет дельту вращения к текущему повороту Актора в локальных координатах самого Актора.

Ну и текущая функция Add Actor World Rotation — добавляет дельту вращения к текущему повороту Актора в мировых координатах.

Практический урок в Unreal Engine

В практическом уроке реализуем вращение Актора (схематичного персонажа из рисунка выше, который является дочерним от Актора постамента) при помощи вызова функции Add Actor World Rotation по событию Event Tick. Весь код будет расположен в Event Graph Актора персонажа BP_Character.

  1. Создадим Blueprint класса Actor с именем BP_Actor для постамента. Добавим ему компонет Cube (для наглядности я его покрасил в зелёный цвет) и уменьшим ему масштаб по оси Z.
  2. Создадим второй Blueprint класса Actor с именем BP_Character для схематичного персонажа. Добавим ему компонент Cube для тела персонажа, и компонент Cube 1 — для рук. Причём Cube 1 сделаем дочерним элементом для Cube и трансформируем его соответствующим образом, чтобы он напоминал руки.
  3. Разместим BP_Actor в игровом мире и добавим ему поворот по оси X на —30 градусов, тем самым развернув его собственную локальную систему координат.
  4. Разместим BP_Character в игровом мире и добавим его в качестве дочернего элемента к Актору BP_Actor. Для этого перейдём в окно Outliner и просто перетащим мышкой BP_Character на BP_Actor. Далее выделим BP_Character и добавим ему абсолютно любой поворот относительно его родительского элемента.
Разместим BP_Character в игровом мире и добавим его в качестве дочернего элемента к Актору BP_Actor
Разместим BP_Character в игровом мире и добавим его в качестве дочернего элемента к Актору BP_Actor
  1. Для вращения Актора персонажа в рамках мировой системы координат, во вкладке Event Graph блюпринта BP_Character по событию Event Tick разместим функцию Add Actor World Rotation.
  2. Вращение персонажа будем осуществлять только вокруг оси Z. Соответственно, по осям X и Y вращение должно оставаться неизменным. Поэтому в параметре Delta Rotation необходимо заполнить значением только ось Z.
  3. Но так как функция Add Actor World Rotation у нас запускается по событию Event Tick , необходимо избежать зависимости от FPS. Соответственно, в расчетах добавочной дельты для оси Z необходимо учесть дельту секунд (Delta Seconds). Для этого в текущем блюпринте создадим новую переменную скорости Speed, тип которой будет float, и зададим ей значение по умолчанию 200. Затем умножим значение Speed на Delta Seconds, что позволит нам получить дельту, которую мы будем прибавлять к текущему значению угла поворота по оси Z.
  4. Для того, чтобы подать получившееся значение дельты отдельно в ось Z, разделим параметр Delta Rotation на 3 float-значения, кликнув по параметру правой клавишей мыши и выбрав опцию Split Struct Pin.
  5. Перенаправим получившееся значение дельты по оси Z в параметр Delta Rotation Z (Yaw).

Таким образом, несмотря на то, что Актор персонажа имеет изначальный поворот относительно родительской системы координат, и Актор-родитель также имеет свой поворот, вращение Актора персонажа мы получим всё равно строго вокруг вертикальной оси Z в рамках мировой системы координат.

Скриншот

Практический урок в Unreal Engine: добавляем Актору плавное вращение в мировых координатах с помощью Blueprint-функции Add Actor World Rotation
Практический урок в Unreal Engine: добавляем Актору плавное вращение в мировых координатах с помощью Blueprint-функции Add Actor World Rotation

Код на BlueprintUE

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


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

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

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