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

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

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

Set Actor Rotation в Unreal Engine

Функция Set Actor Rotation в Unreal Engine
Функция Set Actor Rotation в Unreal Engine

Функция Set Actor Rotation в Unreal Engine устанавливает новое вращение Актора в мировом пространстве, изменяя поворот вокруг трех осей (X , Y и Z) в мировой системе координат. Фактически же функция устанавливает новый поворот для Root Component этого Актора (его корневого компонента).

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

Очень часто SetActorRotation применяется с другой парной, но противоположной по выполняемому действию функцией, возвращающей для Актора текущие значения поворота в пространстве мира: Get Actor Rotation.

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

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

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

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

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

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

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

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

  • Target (Actor, по умолчанию Self) — текущий Актор, для которого необходимо установить новое вращение.
  • New Rotation (rotator, по умолчанию X 0,0; Y 0,0; Z 0,0) — ротатор, представляющий новое значение вращения в мировой координатной системе.
  • Teleport Physics (bool, по умолчанию False) — параметр, определяющий, как будет перемещаться физика Актора. При значении True физика телепортируется в новые координаты в том же состоянии, в каком она была до вращения Актора. При значении False физика будет обрабатывать само вращение, из-за чего (при быстром повороте) могут возникнуть артефакты физики (неправильные, нереалистичные расчёты).
  • Return Value (bool) — возвращаемый параметр. Возвращает значение True, если вращение полностью состоялось, False — в противном случае.

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

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

В практическом уроке реализуем вращение Актора (схематичного персонажа из рисунка выше, который является дочерним от Актора постамента) при помощи вызова функции Set Actor 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 разместим функцию Set Actor Rotation.
  2. Вращение персонажа будем осуществлять только вокруг оси Z. Соответственно, по осям X и Y вращение должно оставаться неизменным. Для этого получим текущее вращение Актора функцией Get Actor Rotation и разделим её возвращаемое значение ротатора на 3 float-значения, кликнув по параметру правой клавишей мыши и выбрав опцию Split Struct Pin. То же самое проделаем и с параметром New Rotation функции Set Actor Rotation.
  3. Передадим текущие значения поворота Актора по осям X и Y из GetActorRotation в соответствующие входящие пины SetActorRotation. Таким образом, по этим осям не будет производиться никаких изменений.
  4. Теперь добавим вращение по оси Z. Для этого возьмем текущий поворот Return Value Z (Yaw) и к нему добавим необходимое дополнительное значение. Результат этой суммы и будет новым значением по оси Z, который мы будем устанавливать для Актора каждый такт вызова события Event Tick.
  5. Но так как функция Set Actor Rotation у нас запускается по событию Event Tick , необходимо избежать зависимости от FPS. Соответственно, в расчетах нового значения вращения по оси Z необходимо учесть дельту секунд (Delta Seconds). Для этого в текущем блюпринте создадим новую переменную скорости Speed, тип которой будет float, и зададим ей значение по умолчанию 200. Затем умножим значение Speed на Delta Seconds, что позволит нам получить дельту, которую мы будем прибавлять к текущему значению угла поворота по оси Z.
  6. Получившееся значение дельты по оси Z перенаправим в параметр New Rotation Z (Yaw).

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

Скриншот

Практический урок в Unreal Engine: устанавливаем новое вращение Актора по оси Z мировой системы координат при помощи функции Set Actor Rotation
Практический урок в Unreal Engine: устанавливаем новое вращение Актора по оси Z мировой системы координат при помощи функции Set Actor Rotation

Код на BlueprintUE

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


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

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

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