Друзья, приветствую, с Вами Будуев Антон. В данной статье мы рассмотрим Blueprint-функции изменения локации (местоположения) компонентов в мировых координатах, а именно: Get World Location, Set World Location и Set World Location And Rotation в Unreal Engine (UE4, UE5).
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
World Location в Unreal Engine
World Location (мировая позиция) — местоположение в мировых координатах. Мировая позиция представляет собой абсолютные координаты объекта или компонента в трёхмерном пространстве игры. Она измеряется относительно начала координат всего игрового мира, которое обычно соответствует координатам (0.0, 0.0, 0.0) игрового уровня.

Все Акторы, которые располагаются на игровом уровне, а также их корневые компоненты (Root Components) измеряются в абсолютных World координатах.
Для компонентов значение World Location определяется по формуле: мировые координаты самого Актора (Actor Location) или его корневого компонента + значения Relative Location каждого дочернего компонента в рамках всего дерева иерархии.
При изменении мировой позиции родительского компонента, мировая позиция дочернего компонента также изменится, однако его относительная позиция (Relative Location) останется неизменной.
Теперь рассмотрим функции, которые позволяют работать в игровом движке с мировой позицией компонентов.
Get World Location

Функция Get World Location в Unreal Engine возвращает текущее абсолютное положение компонента в мировом пространстве. Она вычисляет позицию компонента в мировых координатах на основе его относительного положения (Relative Location) и трансформаций, которые были применены к его родительским компонентам.
Функция доступна в игровом движке Анрил Энджин только для компонентов Scene Component (или его производного класса).
Параметры:
- Target (Scene Component, по умолчанию Self) — текущий компонент, для которого необходимо получить мировые координаты.
- Return Value (vector) — возвращаемый параметр. Возвращает мировые координаты текущего компонента в виде вектора (X, Y, Z).
Set World Location

Функция Set World Location устанавливает новую мировую позицию компонента в трёхмерном пространстве игры. Изменяя расположение компонента относительно начала координат игрового мира (0.0, 0.0, 0.0) и автоматически корректируя его позицию относительно родительского компонента (Relative Location).
Функция доступна в игровом движке Анрил Энджин только для компонентов Scene Component (или его производного класса).
* Также в Unreal Engine есть похожая на SetWorldLocation функция — Set Actor Location. Она устанавливает новую мировую позицию для объекта Actor, а точнее для его корневого компонента (Root Component).
Параметры:
- Target (Scene Component, по умолчанию Self) — текущий компонент, для которого необходимо установить новые координаты.
- New Location (vector, по умолчанию X 0,0; Y 0,0; Z 0,0) — вектор, представляющий новую мировую позицию, куда будет перемещен компонент.
- Sweep (bool, по умолчанию False) — необязательный параметр, который можно использовать для проверки столкновений при перемещении компонента. Если установлено значение True, то перемещение будет происходить с учетом столкновений с другими объектами. В случае возникновения такого события, перемещение остановится, а информация о столкновении будет возвращена в параметре Sweep Hit Result. Причём проверка столкновений производится только для указанного компонента, все дочерние компоненты будут игнорировать данные пересечения, но также остановятся, когда произойдёт остановка текущего компонента. При значении False столкновения текущего компонента с любыми объектами будут проигнорированы.
- Teleport (bool, по умолчанию False) — параметр, определяющий, как будет перемещаться физика компонента. При значении True физика телепортируется в новые координаты в том же состоянии, в каком она была до перемещения компонента. При значении False физика будет обрабатывать само перемещение, из-за чего (при быстром перемещении) могут возникнуть артефакты физики (неправильные, нереалистичные расчёты).
- Sweep Hit Result (structure) — возвращаемый параметр. Структура, возвращающая результаты столкновения компонента с другим объектом при включенной опции Sweep. Так как структура сложная, её можно разделить нодой Break Hit Result.
Функция SetWorldLocation используется, например, для установки начального положения объекта, для его перемещения или телепортации на новое место.
Ниже представлен небольшой фрагмент кода, который демонстрирует, как эта функция позволяет перемещать компонент куба по оси X. Где на каждом такте вызова события Event Tick к текущим координатам куба добавляется смещение в 10 сантиметров по данной оси.
Для расчета смещения используется функция Get World Location, которая возвращает текущие мировые координаты куба. Значения по осям Y и Z передаются в функцию Set World Location напрямую, чтобы избежать смещений по ним. А вот к текущим координатам по оси X на каждом такте добавляются 10 сантиметров, что и приводит к движению куба.
Скриншот
Код на BlueprintUE

Set World Location And Rotation

Функция Set World Location And Rotation отвечает за установку новой позиции компонента в игровом мире и его разворота в мировых координатах. Текущая функция аналогична рассмотренной ранее функции, за исключением того, что она также позволяет устанавливать новое значение угла разворота вокруг осей мировой системы координат.
Разбирать параметры Set World Location And Rotation мы не будем, так как они полностью соответствуют тем, которые мы уже рассматривали, кроме одного — в текущей функции есть один дополнительный параметр New Rotation, позволяющий задать новый угол поворота в мировой системе координат.
Практический урок в Unreal Engine
В качестве дополнительной практики можете изучить урок, где описывается стандартная методика работы с функцией Line Trace By Channel по построению линии трассировки. При настройке которой одной из ключевых функций является Get World Location. Перейти к практике >>
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.