Платформы, которые периодически исчезают и появляются, являются основными элементами в играх жанра «платформер», таких как полосы препятствий. Они заставляют игроков рассчитывать время прыжка на очередную платформу. В случае промаха придётся всё начинать заново.
В этом примере показано, как создать исчезающую платформу с помощью Scene Graph и Verse-компонента. Сравните этот процесс с реализацией этой же концепции с помощью Verse-устройства в уроке Циклически исчезающая платформа.
Настройка исчезающих платформ
Выполните следующие действия, чтобы создать исчезающую платформу с помощью Scene Graph:
Добавьте в сцену модуль DisappearingPlatform. Подробнее о том, как добавлять модули и компоненты в сцену описано в разделе Работа с модулями и компонентами.
Добавьте mesh_component к своему модулю исчезающей платформы и задайте в качестве сетки куб.
Создайте новый компонент Verse с названием
disappear_on_loop_component, добавьте компонент к модулю исчезающей платформы и сохраните его. Чтобы узнать, как создать свой компонент, обратитесь к разделу Создание пользовательского компонента с помощью Verse.Откройте
disappear_on_loop_componentв VS Code, чтобы позже его отредактировать.Добавьте редактируемое свойство типа
floatк компонентуDuration. Оно определяет, как долго будет отображаться платформа перед исчезновением и как долго она будет скрыта перед появлением.Verseusing { /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(component):Чтобы скрыть платформу, сделайте её статическую сетку невидимой, отключив коллизию, чтобы игрок не мог приземлиться на платформу. Добавьте новую функцию между
модулемHide()и классомdisappear_on_loop_component. Внутри этой функции вызовитеGetComponents[]с типом, который вы ищете, в данном случаеmesh_component, чтобы вернуть статичную сетку модуля. Затем вызовитеDisable()для статичной сетки.Verse# If the entity has a mesh or collision component, disable them. (Entity:entity).Hide():void= if: StaticMesh := Entity.GetComponent[mesh_component] then: StaticMesh.Disable()Добавьте ещё одну функцию, которая расширит
модуль, под названиемShow()в классdisappear_on_loop_component. Она реализуется так же, какHide(), но для компонентов статичной сетки вам нужно вызватьEnable().Verse# If the entity has a mesh or collision component, enable them. (Entity:entity).Show():void= if: StaticMesh := Entity.GetComponent[mesh_component] then: StaticMesh.Enable()Наконец, в
OnSimulate()используйте выражениеloop, чтобы циклически скрывать и показывать платформу, вызывая каждый разSleep(). Ваш готовый классdisappear_on_loop_componentдолжен выглядеть следующим образом:Verseusing { /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):Сохраните и скомпилируйте код.
На панели «Структура» UEFN передайте модуль DisappearingPlatform в заготовку disappearing_platform_prefab. Позже вы можете создать больше экземпляров исчезающей платформы в качестве готовых элементов и обновить их внешний вид и базовую реализацию. Подробнее о том, как передавать модули в заготовку, см. в разделе Заготовки и экземпляры заготовок.
Полный сценарий
Ниже приведён полный код, использованный в этом разделе:
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):