Компоненты — это основные строительные блоки, в которых используются данные и логика для создания игры. Компонент движения по опорным кадрам — это способ добавлять опорные кадры анимации к модулям, чтобы они плавно перемещались по уровню в пределах заданных параметров.
В UEFN вы можете перемещать объекты с помощью кода Verse, используя такие функции, как TeleportTo() или MoveTo(), для изменения их положения в мире. Однако с помощью этих функций может быть сложно получить плавное непрерывное движение, поскольку код Verse для этих функций необходимо рассчитывать в каждом обновлении симуляции. Вместо того чтобы перемещать объекты, манипулируя их положением, вы можете использовать анимацию. Компонент keyframed_movement_component может обеспечить плавную анимацию, поскольку объект перемещается между заданными опорными кадрами и делает это без задержек на передачу сигнала между сервером и клиентом. Представьте, что вам нужна вагонетка, которая плавно движется по рельсам, — для этого компонент движения по опорным кадрам станет отличным решением.
Чтобы узнать, как добавить компонент в ваш модуль, см. раздел Работа с модулями и компонентами. Компонент указан как keyframed_movement_component, что соответствует классу Verse для компонента движения по опорным кадрам. Для получения дополнительной информации об API Verse для этого компонента см. модуль keyframed_movement_component справочника по API.
Ссылка на модуль KeyframedMovement в коде открывает доступ к операциям, которые можно выполнять с выбранным модулем. В следующем примере демонстрируется использование @editable и keyframe_movement_delta для перемещения модуля.
Пример
Чтобы модуль перемещался между заданными опорными кадрами:
Создайте модуль в проекте. Если вы делаете это впервые, см. раздел Работа с модулями и компонентами.
Нажмите + Компонент и добавьте mesh_component. Выберите сетку куба.
Добавьте компонент KeyframedMovement.
Нажмите + Компонент ещё раз и выберите Новый компонент Verse.
Назовите его
move_cycle_componentи нажмите Создать.В Visual Studio Code укажите модуль
KeyframedMovement, добавивusing { /UnrealEngine.com/Temporary/SceneGraph/KeyframedMovement }.Чтобы блок
transformработал, убедитесь, что имеется указаниеusing { /Verse.org/SpatialMath }.В начале класса
move_cycle_componentдобавьте массивkeyframed_movement_deltaтипаeditable, назвав егоKeyframes. Выбрав в редакторе массивkeyframed_movement_delta, вы сможете создавать опорные кадры непосредственно на панели Сведения и задатьПреобразование,ДлительностьиЗамедлениедля каждого опорного кадра в анимации.
# A Verse-authored component that can be added to entities
move_cycle_component<public> := class<final_super>(component):
@editable
var Keyframes:[]keyframed_movement_delta = array{}После того как вы соберёте код Verse, опорные кадры отобразятся в редакторе в секции move_cycle_component. Добавьте 2 элемента массива, нажав на значок +.
Теперь вы можете изменить Преобразование, Длительность и Замедление для каждого элемента массива. Каждый элемент массива эквивалентен опорному кадру.
Разверните <b>Преобразование</b> первого элемента и задайте для оси Вперёд значение 500. Для второго элемента задайте параметру Влево значение –500. Для обоих элементов задайте Длительность 2,0 (секунды), а Замедление — cubic_bezier_easing_function.
Важно отметить, что значение каждого нового опорного кадра зависит от предыдущего опорного кадра, а первый опорный кадр — от положения сетки в мире.
Обратите внимание, что значения преобразования, которые раньше указывали оси X, Y и Z , теперь называются Вперёд, Вправо и Вверх. Теперь при определении функции преобразования вам нужно использовать параметры Forward, Right и Up (Вперёд, Вправо и Вверх) в своём коде, чтобы избежать ошибок компилятора. Дополнительную информацию см. в разделе Система координат FRU в UEFN.
Когда вы сохраните и запустите сеанс, вы увидите куб, перемещающийся между заданными опорными кадрами:
Создание опорных кадров в Verse
Опорные кадры можно также создавать с помощью кода Verse:
Получите
keyframed_movement_component.Создайте первый опорный кадр
Key0, вызвав функциюkeyframed_movement_deltaи указав значения параметровTransform,DurationиEasing. Повторите процедуру для второго ключевого кадраKey1.Задайте анимацию. Здесь также можно определить режим воспроизведения. В этом примере будет использоваться анимация
pingpong(имитирующая движение теннисного мячика).Воспроизведите анимацию. Правильный синтаксис см. в коде ниже.
# Runs when the component should start simulating in a running game.
# Can be suspended throughout the lifetime of the component. Suspensions
# will be automatically canceled when the component is disposed of or the game ends.
OnSimulate<override>()<suspends>:void =
# TODO: Place simple suspends logic to run for this component here
Print("OnSimulate")
if:
KFM:keyframed_movement_component = Entity.GetComponent[keyframed_movement_component]
Полный код
Ниже приведена полная версия кода для этого примера, которую можно скопировать и вставить:
using { /Verse.org }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /Verse.org/SpatialMath }
using { /UnrealEngine.com/Temporary/SceneGraph }
using { /UnrealEngine.com/Temporary/SceneGraph/KeyframedMovement }
# A Verse-authored component that can be added to entities
move_cycle_component<public> := class<final_super>(component):