Платформы, которые периодически исчезают и появляются, являются основными элементами в играх жанра «платформер», таких как полосы препятствий. Они заставляют игроков рассчитывать время прыжка на очередную платформу, потому что если они промахнутся, они упадут и придётся начинать всё сначала.
В этом уроке вы научитесь создавать платформу, которая будет циклически исчезать. В этом вам поможет язык Verse в Unreal Editor для Fortnite (UEFN). В конце этого урока для вас приведён полный сценарий.

Используемые возможности языка Verse
loop
: платформа становится то видимой, то невидимой до самого конца игры. В данном примере показано, как реализовать такое поведение с помощью выраженияloop
в Verse.
Используемые API Verse
-
Sleep()
: С помощью функции (functionSleep()
можно задать время видимости/невидимости платформы. -
Редактируемые свойства: два свойства устройства выведены в UEFN, и вы можете настраивать их в редакторе, — это ссылка на устройство платформы и метод
ToggleDelay
для вызова функцииSleep()
.
Подготовка уровня
В этом уроке в качестве отправной точки используется стартовый шаблон Verse. Для начала создайте новый проект на основе примера использования функции устройства Verse.

В этом примере используются следующие объекты окружения и устройства:
-
1 устройство «Точка появления игрока»: эти устройства определяют, где должен появляться игрок в начале игры.
-
3 объекта окружения творческого режима: они имеют несколько вариантов поведения, которые можно вызвать с помощью Verse, такие как
Hide()
иShow()
, чтобы переключать видимость и столкновение платформ. В этом уроке используется Аэроплатформа A в качестве платформы, с которой взаимодействует пользователь, но вы легко можете заменить её на что-то другое, более соответствующее вашему острову.
Выполните следующие действия, чтобы подготовить уровень:
-
Перетащите Аэроплатформу A в свою сцену. Разместите её над полом, чтобы игрок падал, если он не успеет спрыгнуть с исчезающей платформы. Назовите платформу LoopingDisappearingPlatform на панели Структура.
-
Создайте две копии платформы и разместите их с двух сторон от первой платформы друг напротив друга так, чтобы игроку нужно было поторопиться с прыжком. Времени должно едва хватать, чтобы добежать до другого края платформы.
-
Перенесите устройство *Точка появления игрока на одну из платформ. Здесь игрок появится в начале игры. Обстановка на вашем уровне должна выглядеть примерно так:
Создание устройства Verse
В данном примере для определения поведения, которое переключает режимы видимости платформы, используется Verse-устройство. Выполните следующие действия, чтобы настроить устройство Verse и разместить его на уровне.
-
Создайте новое устройство Verse с помощью проводника Verse и назовите его looping_disappearing_platform. Порядок действий см. в разделе Создание собственного устройства с помощью Verse.
-
Перетащите устройство looping_disappearing_platform из Каталога ресурсов на уровень. Порядок действий см. в разделе Создание собственного устройства с помощью Verse.
Редактирование свойств устройства в UEFN
В данном разделе показано, как раскрыть два свойства устройства в UEFN, чтобы их можно было изменять в редакторе:
-
переменная
creative_prop
, ведущая на объект окружения творческого режима, который вы размещаете на уровне; -
константа типа
float
ToggleDelay
, которая содержит время видимости/невидимости платформы.
Выполните следующие действия, чтобы вывести в редактор свойства устройства looping_disappearing_platform, которое вы создали в предыдущем разделе.
-
Откройте проводник Verse и дважды нажмите на looping_disappearing_platform.verse, чтобы открыть сценарий в Visual Studio Code.
-
Добавьте следующие поля в определение класса
looping_disappearing_platform
:-
Редактируемая переменная типа
float
с названиемToggleDelay
. Она отражает время переключения между видимым и невидимым состоянием платформы. Инициализируйте её со значением2.0
, что означает две секунды.# Время ожидания перед переключением видимости платформы. @editable ToggleDelay : float = 2.0
-
Редактируемое поле класса
creative_prop
с названиемDisappearingPlatform
. Оно относится к платформе, которая периодически исчезает и появляется. Так как в вашем коде ещё нет ссылки на этот объект на уровне, вам нужно создать его экземпляр с пустым архетипомcreative_prop{}
. Ссылку на свою парящую платформу вы назначите позже.# Ссылка на платформу на уровне. @editable DisappearingPlatform:creative_prop = creative_prop{}
-
-
Теперь поля вашего класса
looping_disappearing_platform
должны выглядеть так:using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } # См. https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse, чтобы узнать, как создать устройство Verse. # Это Verse-устройство творческого режима, которое можно разместить на уровне looping_disappearing_platform := class(creative_device): # Время ожидания перед переключением видимости платформы. @editable ToggleDelay : float = 2.0 # Ссылка на платформу на уровне. @editable DisappearingPlatform:creative_prop = creative_prop{}
Полезно добавить атрибут
@editable
, чтобы вывести из своего сценария в редактор такие значения какToggleDelay
. Это позволит вам настраивать их в UEFN, не пересобирая каждый раз код Verse, чтобы вы могли быстро перебирать и находить значения, которые соответствуют вашему игровому процессу. -
Сохраните сценарий в Visual Studio Code и скомпилируйте код, чтобы обновить устройство looping_disappearing_platform на уровне.
-
На панели Структура в UEFN выберите устройство looping_disappearing_platform, чтобы открыть его панель Сведения.
-
На панели Сведения в секции Циклически исчезающая платформа:
-
Для DisappearingPlatform задайте LoopingDisappearingPlatform (объект окружения творческого режима, который вы добавили на уровень), нажав на инструмент выбора объекта и выбрав в окне просмотра объект окружения творческого режима, или с помощью поиска, набрав LoopingDisappearingPlatform в строке.
-
Задайте для ToggleDelay время в секундах, в течение которого платформа должна быть видимой/невидимой. По умолчанию задано значение 2.0, мы установили его до этого.
-
Управление появлением и исчезновением платформы
После настройки уровня и устройств можно добавить логику появления и исчезновения платформы. Выполните следующие действия, чтобы задать это поведение для устройства looping_disappearing_platform:
-
В классе
creative_prop
реализованы два метода переключения видимости:Show()
иHide()
. Вернитесь в Visual Studio Code, вOnBegin()
задайте вызовHide()
, а затемShow()
для своейDisappearingPlatform
.# Выполняется при запуске устройства в работающей игре OnBegin<override>()<suspends>:void= # Сделать платформу невидимой. DisappearingPlatform.Hide() # Сделать платформу видимой. DisappearingPlatform.Show()
Если вы запустите этот код, то не увидите, как платформа исчезает и снова появляется, потому что вызовы
Hide()
иShow()
происходят сразу же друг за другом. -
Чтобы платформа дольше оставалась видимой или невидимой, добавьте задержку между вызовами методов
Hide()
илиShow()
с помощью вызова методаSleep()
. ФункцияSleep()
приостанавливает программу — вы можете задать определённое время (в секундах), чтобы приостановить выполнение, передав в функцию аргумент типаfloat
. Задайте вызовSleep()
перед каждым вызовомHide()
иShow()
, чтобы передать задержкуToggleDelay
, которую вы определили до этого.# Выполняется при запуске устройства в работающей игре OnBegin<override>()<suspends>:void= # Ожидание ToggleDelay в секундах. Sleep(ToggleDelay) # Сделать платформу невидимой. DisappearingPlatform.Hide() # Ожидание ToggleDelay в секундах. Sleep(ToggleDelay) # Сделать платформу видимой. DisappearingPlatform.Show()
Если вы запустите этот код, платформа будет невидимой в течение двух секунд (значение
ToggleDelay
), после чего вновь станет видимой до конца игры.Функция
Sleep()
может быть вызвана только в асинхронном контексте. Поскольку методOnBegin()
уже поддерживает асинхронный контекст, то есть содержит спецификаторsuspends
, вам больше не нужно ничего делать. Для получения подробной информации о спецификатореsuspends
см. Спецификаторы и атрибуты. -
Чтобы платформа появлялась/исчезала на протяжении всей игры, можно использовать выражение
loop
. Использованиеloop
повторяет выполнение кода внутри выраженияloop
, если только код не прерывается выражениемbreak
. В этом примере нам нужно переключать режим видимости платформ на протяжении всей игры, поэтому нет необходимости добавлять выражениеbreak
для прерывания циклаloop
, потому что мы хотим, чтобы режим видимости переключался до самого конца игры. Добавьте выражениеloop
в начало функцииOnBegin()
, а для остального кода добавьте отступы, чтобы он находился внутри цикла. МетодOnBegin()
должен выглядеть следующим образом:# Выполняется при запуске устройства в работающей игре OnBegin<override>()<suspends>:void= loop: # Ожидание ToggleDelay в секундах. Sleep(ToggleDelay) # Сделать платформу невидимой. DisappearingPlatform.Hide() # Ожидание ToggleDelay в секундах. Sleep(ToggleDelay) # Сделать платформу видимой. DisappearingPlatform.Show()
-
Сохраните сценарий и нажмите Verse —> Собрать код Verse, чтобы скомпилировать код.
-
Нажмите Запустить сеанс на панели инструментов UEFN, чтобы выполнить игровой тест уровня.
Во время игрового теста уровня платформа должна появляться и исчезать каждые две секунды в течение всего времени, пока идет игра.

Полный сценарий
Следующий код — это полный сценарий, который заставляет платформу циклически исчезать и появляться.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# См. https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse, чтобы узнать, как создать устройство Verse.
# Это Verse-устройство творческого режима, которое можно разместить на уровне
looping_disappearing_platform := class(creative_device):
# Время ожидания перед переключением видимости платформы.
@editable
ToggleDelay : float = 2.0
# Ссылка на платформу на уровне.
@editable
DisappearingPlatform:creative_prop = creative_prop{}
# Выполняется при запуске устройства в работающей игре
OnBegin<override>()<suspends>:void=
loop:
# Ожидание ToggleDelay в секундах.
Sleep(ToggleDelay)
# Сделать платформу невидимой.
DisappearingPlatform.Hide()
# Ожидание ToggleDelay в секундах.
Sleep(ToggleDelay)
# Сделать платформу видимой.
DisappearingPlatform.Show()
Самостоятельная работа
В этом уроке вы научились создавать устройство с помощью Verse, которое переключает режим видимости платформы на протяжении всей игры.
Используя полученные знания, попробуйте выполнить следующее:
-
Скопируйте устройство looping_disappearing_platform и объект окружения и попробуйте задать для копий разное время
ToggleDelay
, чтобы создать цепочку платформ. -
Примените рассмотренные концепции для периодического вызова функций на других объектах, таких как устройство перемещения объектов.