Платформы, которые периодически исчезают и появляются, являются основными элементами в играх жанра «платформер», таких как полосы препятствий. Они заставляют игроков рассчитывать время прыжка на очередную платформу, потому что если они промахнутся, они упадут и придётся начинать всё сначала.
В этом уроке вы научитесь создавать платформу, которая будет циклически исчезать. В этом вам поможет язык 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, ведущая на объект окружения творческого режима, который вы размещаете на уровне; -
константа типа
floatToggleDelay, которая содержит время видимости/невидимости платформы.
Выполните следующие действия, чтобы вывести в редактор свойства устройства 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, чтобы создать цепочку платформ. -
Примените рассмотренные концепции для периодического вызова функций на других объектах, таких как устройство перемещения объектов.