Blueprint-функции Get Relative Location, Set Relative Location и Add Relative Location в Unreal Engine

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

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

Relative Location в Unreal Engine

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

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

Get Relative Location

Функция Get Relative Location в Unreal Engine
Функция Get Relative Location в Unreal Engine

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

Параметры:

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

Set Relative Location

Функция Set Relative Location в Unreal Engine
Функция Set Relative Location в Unreal Engine

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

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

Параметры:

  • 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.

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

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

Скриншот

Создаём движение компоненту куба в относительной системе координат функциями GetRelativeLocation и SetRelativeLocation
Создаём движение компоненту куба в относительной системе координат функциями GetRelativeLocation и SetRelativeLocation

Код на BlueprintUE

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


Set Relative Location And Rotation

Функция Set Relative Location And Rotation в Unreal Engine
Функция Set Relative Location And Rotation в Unreal Engine

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

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

Add Relative Location в Unreal Engine

Функция Add Relative Location в Unreal Engine
Функция Add Relative Location в Unreal Engine

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

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

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

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

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

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

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

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