Get, Set, Add Location (World и Relative) — изменение локации компонентов в Unreal Engine

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы рассмотрим Blueprint-функции изменения локации (местоположения) компонентов в Unreal Engine (UE4, UE5), а именно: Get World Location, Set World Location, Set Relative Location, Add Relative Location и другие.

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

World и Relative Location в Unreal Engine

Но для начала я предлагаю определиться, что такое вообще World и Relative Location, и начнём мы с определения Relative.

Relative Location

Relative location в Unreal Engine (относительное местоположение) — это позиция дочернего компонента по отношению к родительскому, то есть его смещение от родителя.

Каждый объект Actor состоит как минимум из одного или нескольких компонентов. Ключевым и первым компонентом в Акторе всегда является корневой компонент Default Scene Root. Он служит основой для всей иерархии компонентов в конкретном Акторе.

Если к этому Актору добавить дополнительный компонент, например, класса Scene Component, то он станет дочерним по отношению к Default Scene Root и будет находиться на определённом расстоянии от своего родителя. Это расстояние и называется относительным местоположением — Relative Location.

Координаты Relative Location компонента Cube составляют -140, 190, -130. Данные координаты являются смещением дочернего компонента относительно родительского
Координаты Relative Location компонента Cube составляют -140, 190, -130. Данные координаты являются смещением дочернего компонента относительно родительского

Независимо от количества объектов в иерархии, координаты Relative Location каждого последующего дочернего компонента будут определяться смещением относительно его родителя. Обратите внимание: не относительно первого корневого компонента (Default Scene Root), а относительно его непосредственного родителя.

Компонент Sphere является дочерним от компонента Cube. Координатами Relative Location для Sphere является смещение относительно его родителя Cube, а именно, 300, 0, 0
Компонент Sphere является дочерним от компонента Cube. Координатами Relative Location для Sphere является смещение относительно его родителя Cube, а именно, 300, 0, 0

World Location

World Location — местоположение в мировых координатах. Мировая позиция представляет собой абсолютные координаты объекта или компонента в трёхмерном пространстве игры. Она измеряется относительно начала координат всего игрового мира, которое обычно соответствует координатам 0,0,0 игрового уровня.

World Location измеряется относительно начала координат всего игрового мира (обычно это 0,0,0 игрового уровня)
World Location измеряется относительно начала координат всего игрового мира (обычно это 0,0,0 игрового уровня)

Все Акторы, которые располагаются на игровом уровне, а также их корневые компоненты (Root Components) измеряются в абсолютных World координатах.

Для компонентов значение World Location определяется по формуле: мировые координаты самого Актора (Actor Location) или его корневого компонента + значения Relative Location каждого дочернего компонента в рамках всего дерева иерархии.

То есть, в примере, который я показывал на предыдущих скриншотах, для компонента Cube мировые координаты рассчитываются следующим образом:

World Location = Actor Location + Relative Location Cube (-140, 190, -130)

А для компонента Sphere следующим образом:

Actor Location + Relative Location Cube (-140, 190, -130) + Relative Location Sphere (300, 0, 0)

Подводя итог, можно сказать, что при изменении мировой позиции (World Location) родительского компонента, мировая позиция (World Location) дочернего компонента также изменится, однако его относительная позиция (Relative Location) останется неизменной.

Теперь подробно рассмотрим функции, которые позволяют в Blueprints Unreal Engine управлять мировым и относительным расположением компонентов. Эти функции доступны для всех компонентов, которые наследуются от базового класса Scene Component, включая Static Mesh Component, Skeletal Mesh Component, Camera Component и другие. Так как все функции работают именно с компонентами, то рекомендую предварительно изучить общую концепцию компонентов в движке, описанную в отдельной статье Unreal Engine Components.

Get World Location

Функция Get World Location в Unreal EngineФункция Get World Location в Unreal Engine возвращает текущее абсолютное положение компонента в мировом пространстве. Она вычисляет позицию мировых координат компонента на основе его относительного положения (Relative Location) и трансформаций, которые были применены к его родительским компонентам.

Параметры:

  • Target (Scene Component, по умолчанию Self) — текущий компонент, для которого необходимо получить мировые координаты.
  • Return Value (vector) — возвращаемый параметр. Возвращает мировые координаты текущего компонента в виде вектора (X, Y, Z).

Set World Location

Функция Set World LocationФункция Set World Location устанавливает новую мировую позицию компонента в трёхмерном пространстве игры. Изменяя расположение компонента относительно начала координат игрового мира (0, 0, 0) и автоматически корректируя его позицию относительно родительского компонента (Relative Location).

* Также в Unreal Engine есть похожая на Set World Location функция — 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.

Функция Set World Location используется, например, для установки начального положения объекта, для перемещения или его телепортации в новое место.

Ниже представлен небольшой фрагмент кода, который демонстрирует, как эта функция позволяет перемещать компонент куба по оси X. Где на каждом такте вызова события Event Tick к текущим координатам куба добавляется смещение в 10 сантиметров по данной оси.

Для расчета смещения используется функция Get World Location, которая возвращает текущие мировые координаты куба. Значения по осям Y и Z передаются в функцию Set World Location напрямую, чтобы избежать смещений по ним. А вот к текущим координатам по оси X на каждом такте добавляются 10 сантиметров, что и приводит к движению куба.

Скриншот

Создаём движение компоненту куба с использованием функций Get World Location и Set World Location
Создаём движение компоненту куба с использованием функций Get World Location и Set World Location

Код на BlueprintUE

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


Set World Location And Rotation

Функция Set World Location And RotationФункция Set World Location And Rotation отвечает за установку новой позиции компонента в игровом мире и его разворота в мировых координатах. Она изменяет расположение и поворот компонента относительно начала координат (0, 0, 0), что автоматически влияет на его расположение и разворот относительно родительского компонента.

Функция Set World Location And Rotation аналогична рассмотренной ранее функции, за исключением того, что она также позволяет устанавливать новое значение угла разворота в мировых координатах.

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

Get Relative Location

Функция Get Relative LocationНода Get Relative Location в Анрил Энджин возвращает текущее значение относительного местоположения компонента относительно его родителя (Relative Location). Причём возврат значения уже заранее реплицирован для многопользовательских игр. По сути, она вообще ничего не вычисляет, а только возвращает уже имеющееся значение.

Параметры:

  • Target (Scene Component, по умолчанию Self) — текущий компонент, для которого необходимо получить относительные координаты.
  • Relative Location (vector) — возвращаемый параметр. Возвращает относительные координаты текущего компонента в виде вектора (X, Y, Z).

Set Relative Location

Функция Set Relative LocationФункция Set Relative Location служит для установки новых локальных координат компонента относительно его родительского элемента. Важно отметить, что, в отличие от ранее рассмотренных функций, она не изменяет абсолютную позицию компонента в игровом мире, а лишь корректирует его расположение относительно родителя. Это означает, что компонент будет перемещен так, чтобы его новое положение относительно родительского компонента соответствовало заданному вектору.

Set Relative Location предоставляет точный контроль над положением объектов в локальной системе координат, что особенно полезно при создании иерархий. С помощью этой функции можно размещать дочерние компоненты относительно родительского объекта или прикреплять один объект к другому, используя точные относительные координаты. Например, можно прикрепить оружие к руке персонажа.

Параметры данной функции разбирать я не буду, так как они полностью соответствуют всем параметрам, которые мы разбирали выше. Единственное отличие заключается в том, что в параметр New Location функции Set Relative Location необходимо вводить новые относительные координаты, а не мировые, как это было в других функциях.

Set Relative Location And Rotation

Функция Set Relative Location And RotationФункция Set Relative Location And Rotation позволяет задать новое положение компонента, а также изменить угол его поворота относительно его родителя. Эта функция полностью повторяет предыдущую, но с дополнительным параметром, отвечающим за относительный угол поворота.

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

Add Relative Location

Функция Add Relative LocationФункция Add Relative Location в Unreal Engine добавляет смещение к текущей относительной позиции компонента. В отличие от Set Relative Location, которая полностью заменяет текущую относительную позицию, Add Relative Location добавляет указанный вектор к текущей относительной позиции компонента.

Параметры функции полностью идентичны параметрам других функций, которые мы разбирали выше, за исключением параметра New Location. В функции Add Relative Location такого параметра нет, а вместо него имеется параметр Delta Location, представляющий собой вектор, который будет добавлен к текущим относительным координатам.

Add Relative Location часто применяется для создания логики передвижения компонента. Что можно легко реализовать, вызывая функцию с определённой периодичностью и постоянно добавляя компоненту смещение Delta Location.

Поскольку эта функция отлично подходит для реализации логики движения, давайте модифицируем код, описывающий перемещение куба, который мы рассматривали ранее в практике, где использовали функцию Set World Location. Новый код, в котором применяется Add Relative Location, станет гораздо проще предыдущего, так как нам не потребуется вычислять новые координаты для перемещения объекта. Достаточно будет лишь задать смещение.

Создаём движение компоненту куба функцией Add Relative Location
Создаём движение компоненту куба функцией Add Relative Location

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

В качестве дополнительной практики можете изучить урок, где я описываю стандартную методику работы с функцией Line Trace By Channel по построению линии трассировки. При настройке которой одной из ключевых функций является Get World Location. Перейти к практике >>

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

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

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