Функции Add World Rotation и Add Local Rotation в Unreal Engine

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

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

Add World Rotation

Функция Add World Rotation в Unreal Engine
Функция Add World Rotation в Unreal Engine

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

Также в Unreal Engine имеется схожая функция Add Actor World Rotation, но добавляющая дельту вращения не для компонента, а для Актора в целом.

На рисунке ниже представлена мировая система координат, где ось Z всегда направлена строго вертикально снизу вверх. А также относительная родительская система координат для схематичного персонажа, который стоит на зелёном постаменте, являющемся родительским компонентом для персонажа. Причём постамент имеет наклон, вследствие чего его ось Z наклонена. Соответственно, если компоненту персонажа добавить вращение функцией Add World Rotation по оси Z, то вращаться он будет всё-равно вокруг мировой оси Z, а не родительской. Далее на практическом примере мы реализуем такое вращение.

Различия World (мировой) и Relation (относительной) родительской системы координат в Unreal Engine
Различия World (мировой) и Relation (относительной) родительской системы координат в Unreal Engine

Add World Rotation доступна в игровом движке Анрил Энджин только для компонентов Scene Component (или его производного класса) и используется для создания механик, где компонент должен вращаться относительно осей мировой системы координат, независимо от родительской иерархии.

Параметры

Разберём параметры функции Add World Rotation:

  • Target (Scene Component, по умолчанию 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: создаём функцией Add World Rotation вращение компонента в рамках мировой системы координат

  1. Создадим Blueprint класса Actor с именем BP_Actor.
  2. Добавим ему несколько компонентов Cube. Где компонент Cube (для наглядности я его покрасил в зелёный цвет) будет являться постаментом для персонажа, компонент Cube 1 — телом персонажа, а компонент Cube 2 — руками персонажа. Причём Cube является родительским элементом для Cube 1, а он, в свою очередь, является родительским для Cube 2.
  3. Разместим BP_Actor в игровом мире и добавим поворот компоненту Cube по оси X на —30 градусов, тем самым развернув его собственную локальную систему координат.

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

Скриншот

Практический урок в Unreal Engine: создаём вращение компонента в рамках мировой системы координат функций Add World Rotation
Практический урок в Unreal Engine: создаём вращение компонента в рамках мировой системы координат функций Add World Rotation

Код на BlueprintUE

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


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

Add Local Rotation

Функция Add Local Rotation в Unreal Engine
Функция Add Local Rotation в Unreal Engine

Функция Add Local Rotation в Unreal Engine используется для добавления дельты вращения к текущему повороту компонента в рамках его локальной системы координат. Это означает, что вращение будет добавляться вокруг осей X, Y, Z не мировой или родительской системы координат, а своей собственной, внутренней.

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

В следствии того, что персонаж развёрнут как относительно мира, так и относительно родителя, направления осей его локальной системы координат не совпадают ни с мировыми, ни с родительскими. Соответственно, если компоненту персонажа добавить вращение функцией Add Local Rotation по оси Z, то вращаться он будет исключительно вокруг своей локальной оси Z, а не мировой или родительской. Далее на практическом примере мы реализуем такое вращение.

Различия World (мировой) и Relation (относительной родительской) и Local (собственной, локальной) систем координат в Unreal Engine
Различия World (мировой) и Relation (относительной родительской) и Local (собственной, локальной) систем координат в Unreal Engine

Add Local Rotation доступна только для компонентов Scene Component (или его производного класса) и используется для создания плавных анимаций или эффектов, где компонент должен вращаться относительно своей собственной ориентации (например, поворот головы персонажа, движение конечностей, вращение двери или колеса).

Параметры данной функции разбирать мы не будем, так как они полностью соответствуют тем, которые мы уже рассматривали выше, кроме одного — для параметра Delta Rotation необходимо указывать значение дельты ротатора в рамках локальной системы координат.

Практический урок в Unreal Engine: создаём функцией Add Local Rotation вращение компонента в рамках локальной системы координат

  1. Данный пример будет основан на практике, которую мы делали выше. Единственное, после того как BP_Actor был размещен на сцене, необходимо повернуть не только родительский зелёный постамент, но и сам компонент персонажа. Поворот можно сделать абсолютно любым. Он нужен нам просто для наглядности вращения компонента по осям своей внутренней локальной системы координат.
  2. Также и сам код будет соответствовать коду, который мы писали на практике выше, за исключением, естественно, функции изменения поворота. В текущем примере мы используем Add Local Rotation.

Скриншот

Практический урок в Unreal Engine: создаём вращение компонента в рамках локальной системы координат функцией Add Local Rotation
Практический урок в Unreal Engine: создаём вращение компонента в рамках локальной системы координат функцией Add Local Rotation

Код на BlueprintUE

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


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

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

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

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