Теперь, когда вы создали модули, которые перемещаются вперёд и назад между целями, пора создать заготовки, которые вы сможете использовать для быстрой настройки собственного уровня.
Создание заготовки
Для начала нужно определить набор модулей, из которых состоит перемещающийся модуль. В каждом наборе будет несколько модулей. Первый модуль будет представлять саму платформу, а остальные — пункты назначения, в которые будет перемещаться платформа. Выполните следующие действия чтобы создать готовый элемент возвращающейся в исходную точку платформы:
Добавьте в сцену модуль
AnimatingBlockSet. Подробнее о том, как добавлять модули и компоненты в сцену см. в статье Работа с модулями и компонентами.Добавьте ещё один модуль
AnimatingBlockв сцену в качестве дочернего элементаAnimatingBlockSet. Задайте преобразование этого модуля как преобразование родительского модуля. Этот модуль будет воспроизводить анимацию.Добавьте
mesh_componentк своему AnimatingBlock и назначьте для него форму куба.Добавьте
animate_to_targets_componentиkeyframed_movement_componentвAnimatingBlock. Это компонент Verse, определённый вами ранее.Добавьте в сцену три новых модуля —
StartingTarget,Target2иTarget3и установите их в качестве дочерних элементовAnimatingBlockSet. Добавьте к каждому из нихmesh_componentи задайте для него форму сферы. Это позволит визуализировать перемещение вашего модуля в мире.Вы можете менять положение этого модуля, чтобы перемещать платформу в другие области, а также отключить дочерний компонент
mesh_component, как только расположите платформу в нужном месте, чтобы сфера не появлялась во время игры.Разместите
StartingTargetс теми же значениями преобразования, что иAnimatingBlock, аTarget2иTarget3— в местах, куда должен перемещаться блок. Попробуйте задать дляTarget2иTarget3разный масштаб и вращение, чтобы увидеть, как меняется блок при анимации на каждом из них.Выберите модуль
AnimatingBlockв редакторе. На панели «Сведения» добавьте три элемента в массивSegments. ЗадайтеSegmentStartPositionдля каждого целевого модуля в том порядке, в котором блок должен перемещаться к ним. Вы также можете изменитьPauseSeconds,AnimationDurationиEasingFunction, чтобы настроить движение блока.Наконец, на панели «Структура» нажмите правой кнопкой мыши на
AnimatingEntitySetи выберите «Сохранить как заготовку». Назовите эту заготовкуanimating_entity_prefab.
Пример заготовки с описанными выше настройками. Поскольку Target2 и Target3 имеют разные значения вращения и масштабирования, AnimatingBlock будет соответствующим образом масштабироваться и поворачиваться по мере перемещения к ним.
Создание уровня-платформера
Вот и всё! После завершения подготовительных работ пора приступить к разработке! Вы будете использовать созданные вами заготовки для быстрой разработки уровня-платформера!
В начале уровня попробуйте использовать animating_entity_set_prefab, чтобы создать самоформирующуюся конструкцию моста. Вы можете выполнить переопределение mesh_component каждого модуля, добавив собственные сетки, чтобы придать уникальный стиль. Используйте режим анимации OneShot, чтобы блоки оставались на месте после завершения перемещения.
Блоки медленно встают на место, чтобы построить мост, по которому может перейти игрок.
Затем разместите несколько созданных вами элементов animating_entity_set_prefab, чтобы создать цепочку платформ, по которым игрокам нужно будет осторожно перемещаться. Попробуйте задать разные значения AnimationDuration, PauseSeconds и EasingFunction в каждом сегменте, чтобы сделать каждую платформу уникальной и держать игроков в напряжении. В следующем примере игрок должен пройти через три платформы, на каждой из которых разная длительность анимации и время пауз.
Прыжки должны быть более интенсивными, когда игроки прыгают через лаву.
Симуляция всех ваших модулей будет происходить одновременно, поэтому ваши платформы также будут перемещаться одновременно. Помните об этом при размещении платформ, особенно если у вас несколько платформ, перемещающихся в одном направлении, — из-за этого некоторые прыжки станут невозможными, если вы не измените значения AnimationDuration и PauseSeconds для этих платформ.
А как насчёт периодически исчезающих платформ? С помощью disappearing_entity_prefab создайте секцию, в которой игрокам нужно перепрыгивать через платформы, которые исчезают и появляются в разное время. Задайте для них разные значения длительности, чтобы создать игрокам сложные ситуации.
Игроки должны следить за временем, за которое каждый модуль пересекает эту секцию.
Наконец, попробуйте использовать animating_entity_prefab в качестве препятствия, которое игроки должны обходить. В следующем примере игрок должен пройти по цепочке платформ через водоём, убегая от гигантского блока. Для блока настраивается несколько занчений длительность анимации и пауз, чтобы сделать пересечение водоёма сложным, но выполнимым.
Невозможно расслабиться у водоёма, когда вас преследует гигантский куб.
Самостоятельная работа
Вот и всё! Изучив это руководство, вы сможете использовать пользовательские компоненты Verse для создания собственной игры в жанре «платформер». Используя полученные знания, попробуйте сделать следующее:
Сможете ли вы использовать несколько компонентов Verse на одной платформе для создания интересных сценариев? Как насчёт платформы, которая перемещается и исчезает?
Подумайте о том, какие еще компоненты вы могли бы использовать для платформера. Как насчёт платформы, которая использует компонент света, чтобы сообщать, когда на неё можно наступить, или компонента системы частиц, который сообщает, может ли платформа нанести урон?
Попробуйте создать другие пользовательские компоненты Verse, чтобы составить новые типы препятствий. Как насчёт модуля, через который можно пройти, только если он становится определённого цвета? Что если сделать самонаводящийся модуль, который определяет, где находится игрок, и медленно следует за ним?
Полный код
Ниже приведён полный код, созданный в этом уроке:
disappear_on_loop_component.verse
using { /Verse.org }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /Verse.org/SceneGraph }
# Loops between hiding and showing the entity by enabling and disabling
# its static mesh and collision components.
disappear_on_loop_component := class<final_super>(component):
animate_to_targets_component.verse
using { /Verse.org }
using { /Verse.org/Native }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /Verse.org/SpatialMath }
using { /Verse.org/SceneGraph }
using { /Verse.org/SceneGraph/KeyframedMovement }
using { /UnrealEngine.com }
# Editor Tool Tips