Приветствую, друзья, с Вами Будуев Антон. В данной статье мы разберём, как добавить плавное вращение объекту Актора в локальной системе координат с помощью Blueprint-функции Add Actor Local Rotation в Unreal Engine (UE4, UE5).
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Add Actor Local Rotation в Unreal Engine

Функция Add Actor Local Rotation в Unreal Engine используется для добавления дельты вращения к текущему вращению Актора в его локальной системе координат. Это означает, что вращение будет происходить вокруг осей X, Y, Z собственной внутренней системы координат самого Актора, а не в мировых или родительских координатах.
Фактически же функция добавляет вращение для Root Component этого Актора (его корневого компонента).
Функция доступна для блюпринтов класса Actor (или его производного класса) и используется в том случае, когда необходимо создать простое ровное вращение объекта относительно своей собственной внутренней ориентации, например, поворот головы персонажа, движение конечностей, оружия, вращение двери, шестерёнок или колеса, поворот рукоятки или рычага и так далее.
Локальная система координат
Как уже говорилось выше, Add Actor Local Rotation в Анрил Энджин добавляет дельту вращения Актору в системе локальных координат. Но что это значит, локальных?
Всего в Unreal Engine для любого Актора доступно 3 системы координат:
- мировая,
- относительная (родительская),
- локальная.
На рисунке ниже представлены 2 Актора. Зелёный Актор — постамент для персонажа. И второй Актор — схематичный персонаж. Причём персонаж подсоединён к Актору постамента как дочерний элемент. Так вот, если рассматривать ситуацию с точки зрения Актора персонажа, то у него будут 3 системы координат: локальная — это его собственные оси, относительная — оси его родителя и мировая — оси игрового мира.

И как бы ни был развёрнут сам объект Актора относительно родительского элемента (конечно, если у него есть родитель в иерархии) или относительно мира, функция Add Actor Local Rotation в любом случае всегда будет вращать объект по осям X, Y, Z внутренней локальной системы координат самого Актора. То есть объект будет вращаться вокруг себя же.
Параметры функции Add Actor Local 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 World Rotation — добавляет дельту вращения к текущему повороту Актора в мировых координатах.
Ну и текущая функция Add Actor Local Rotation — добавляет дельту вращения к текущему повороту Актора в локальных координатах самого Актора.
Практический урок в Unreal Engine
В практическом уроке реализуем вращение Актора (схематичного персонажа из рисунка выше, который является дочерним от Актора постамента) при помощи вызова функции Add Actor Local Rotation по событию Event Tick. Весь код будет расположен в Event Graph Актора персонажа BP_Character.
- Создадим Blueprint класса Actor с именем BP_Actor для постамента. Добавим ему компонет Cube (для наглядности я его покрасил в зелёный цвет) и уменьшим ему масштаб по оси Z.
- Создадим второй Blueprint класса Actor с именем BP_Character для схематичного персонажа. Добавим ему компонент Cube для тела персонажа, и компонент Cube 1 — для рук. Причём Cube 1 сделаем дочерним элементом для Cube и трансформируем его соответствующим образом, чтобы он напоминал руки.
- Разместим BP_Actor в игровом мире и добавим ему поворот по оси X на —30 градусов, тем самым развернув его собственную локальную систему координат.
- Разместим BP_Character в игровом мире и добавим его в качестве дочернего элемента к Актору BP_Actor. Для этого перейдём в окно Outliner и просто перетащим мышкой BP_Character на BP_Actor. Далее выделим BP_Character и добавим ему абсолютно любой поворот относительно его родительского элемента.

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

Код на BlueprintUE

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