В этом разделе вы узнаете, как создать устройство Verse для управления синхронизацией времени и переходами между видами с камер и элементами интерфейса. В конце раздела приведён полный сценарий, который вы можете скопировать и вставить в свой код.
Выполните следующие шаги, чтобы создать устройство Verse «Заставка»:
- Создайте новое устройство Verse с названием title_sequence и добавьте его на уровень. Порядок действий см. в разделе Создание собственного устройства с помощью Verse.
- Добавьте следующие поля в своё устройство Verse:
- Редактируемая константа устройства «Закреплённая камера»
SplashScreenGameCamera, которая будет представлять собой камеру для показа главных экранов. - Редактируемое устройство «Закреплённая камера»
TitleGameCamera, которое будет представлять собой камеру для показа главного экрана игры. - Редактируемое устройство «Всплывающее диалоговое окно»
StartGameDialog, отображающее в диалоговом окне опцию для запуска игры игроком. - Редактируемое устройство для вывода сообщений в интерфейсе
TitleScreen, в котором будет отображаться интерфейс главного экрана игры. - Редактируемая переменная с плавающей запятой
GameMenuDelay, определяющая, как долго должен отображаться главный экран перед появлением игрового меню. - Редактируемый массив устройств для вывода сообщений в интерфейсе
SplashScreens, которые будут показывать все экраны заставки перед главным экраном. - Редактируемое устройство управления интерфейсом
IntroHUDController, позволяющее скрыть все внутриигровые элементы интерфейса во время воспроизведения заставки. - Редактируемое устройство управления интерфейсом
GameHUDController, отображающее все внутриигровые элементы интерфейса после запуска игры. - Редактируемое устройство «Триггер»
GameStart, которое можно использовать для оповещения всех устройств о запуске игры.
using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Simulation } title_sequence:= class(creative_device): # Игровая камера для отображения экранов заставки поверх прочих изображений. @editable SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Игровая камера для отображения главного экрана игры поверх прочих изображений. @editable TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{} # Опция в диалоговом окне для запуска игры игроком. @editable StartGameDialog:popup_dialog_device = popup_dialog_device{} # Главный экран игры для отображения. @editable TitleScreen:hud_message_device = hud_message_device{} # Как долго должен отображаться главный экран перед появлением игрового меню. @editable GameMenuDelay:float = 2.5 # Экраны заставки, отображаемые перед главным экраном. @editable SplashScreens:[]hud_message_device = array{} # Устройство управления интерфейсом, позволяющее скрыть все внутриигровые элементы интерфейса. @editable IntroHUDController:hud_controller_device = hud_controller_device{} # Устройство управления интерфейсом, отображающее все элементы внутриигрового интерфейса при запуске игры. @editable GameHUDController:hud_controller_device = hud_controller_device{} # Метод уведомления всех устройств о запуске игры. @editable GameStart:trigger_device = trigger_device{} # Выполняется при запуске устройства в работающей игре OnBegin<override>()<suspends>:void= - Редактируемая константа устройства «Закреплённая камера»
- Создайте метод
ShowTitleAndGameMenu()со спецификатором suspends. Этот метод отображает камеру для главного экрана, сам главный экран, ждёт GameMenuDelay секунд перед отображением диалогового окна запуска игры и ожидает, когда игрок нажмёт кнопку Запустить игру в интерфейсе.# Отображает главный экран и опцию «Запустить игру». ShowTitleAndGameMenu()<suspends>:void= # Добавить камеру главного экрана для всех игроков. TitleGameCamera.AddToAll() # Отобразить главный экран. TitleScreen.Show() # Подождать GameMenuDelay секунд перед отображением настройки «Запустить игру». Sleep(GameMenuDelay) # Отобразить меню «Запустить игру» StartGameDialog.Show() # Подождать, когда игрок нажмёт «Запустить игру», прежде чем делать что-то ещё. StartGameDialog.RespondingButtonEvent.Await() - Создайте метод
HideTitleAndGameMenu(). Этот метод скрывает главный экран и удаляет камеру, используемую на главном экране.# Скрыть главный экран и удалить камеру для всех игроков. HideTitleAndGameMenu():void= TitleScreen.Hide() TitleGameCamera.RemoveFromAll() - Создайте метод
ShowSplashScreens(). Этот метод перебирает все устройства для вывода сообщений в интерфейсе, добавленные в массивSplashScreens, отображая экраны заставки, и ожидает в течение времени отображения экрана заставки, установленного в его свойствах. После отображения всех экранов заставки камера для отображения экранов заставки отключается.# Отобразить ряд экранов заставки. ShowSplashScreens()<suspends>:void= # Перебирает все экраны заставки. for (SplashScreen : SplashScreens): # Показать каждый экран заставки. SplashScreen.Show() # Подождать, пока будет отображаться экран заставки, в течение заданного времени. Sleep(SplashScreen.GetDisplayTime()) # Удалить игровую камеру, используемую для отображения экранов заставки. SplashScreenGameCamera.Disable() - Создайте метод
ToggleStasisForAllPlayers(). Этот метод перебирает всех игроков и помещает их в стазис (чтобы они не могли двигаться), если аргументShouldFreezeимеет значениеtrue, и выводит их из стазиса (чтобы они снова могли двигаться), если аргументShouldFreezeимеет значениеfalse.# Переключить состояние стазиса игрока. # Если ShouldFreeze имеет значение true, все игроки помещаются в стазис. # Если ShouldFreeze имеет значение false, все игроки выводятся из стазиса. ToggleStasisForAllPlayers(ShouldFreeze:logic):void= for: Player : GetPlayspace().GetPlayers() Character := Player.GetFortCharacter[] do: if (ShouldFreeze?): # Поместить игрока в стазис, запретив ему поворачиваться или проявлять эмоции. Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false}) else: # Освободить игрока из стазиса. Character.ReleaseFromStasis() - Обновите
OnBegin()следующим образом:- Включите устройство управления интерфейсом, чтобы скрыть все внутриигровые элементы интерфейса, с помощью
IntroHUDController.Enable(). - Поместите игроков в стазис, чтобы они не могли двигаться во время вступления, с помощью
ToggleStasisForAllPlayers(true). - Отобразите последовательность экранов заставки с помощью
ShowSplashScreens(). - Скройте главный экран и игровое меню в самом конце выполнения функции
OnBegin(), используя выражение defer и вызвавHideTitleAndGameMenu(). - Отобразите главный экран и игровое меню с помощью
ShowTitleAndGameMenu(). - Освободите всех игроков из стазиса с помощью
ToggleStasisForAllPlayers(false). - Замените устройства управления интерфейсом из HUD-интерфейса вступления на реальный игровой HUD-интерфейс.
- Наконец, вызовите
GameStart.Trigger(), чтобы уведомить все прослушивающие устройства о запуске игры.# Выполняется при запуске устройства в работающей игре OnBegin<override>()<suspends>:void= IntroHUDController.Enable() # Подождать одно обновление симуляции, чтобы всё инициализировалось. Sleep(0.0) # Поместить игроков в стазис, чтобы они не могли перемещаться. ToggleStasisForAllPlayers(true) # Отобразить ряд экранов заставки. ShowSplashScreens() # Скрыть главный экран и игровое меню в самом конце. # Это отложенное выполнение производится при выходе из текущего блока кода, # то есть в конце функции OnBegin, после GameStart.Trigger(). defer: HideTitleAndGameMenu() # Отобразить главный экран и игровое меню. ShowTitleAndGameMenu() # Освободить игроков из стазиса, чтобы они снова могли перемещаться. ToggleStasisForAllPlayers(false) # Заменить устройства управления интерфейсом на реальный игровой HUD-интерфейс. IntroHUDController.Disable() GameHUDController.Enable() # Сообщить всем прослушивающим устройствам, что игра запускается! GameStart.Trigger()
- Включите устройство управления интерфейсом, чтобы скрыть все внутриигровые элементы интерфейса, с помощью
- Сохраните файл Verse и скомпилируйте код, чтобы обновить устройство Verse на уровне.
Полный сценарий
Ниже приведён полный код устройства Verse «Заставка».
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Simulation }
title_sequence := class(creative_device):
# Игровая камера для отображения экранов заставки поверх прочих изображений.
@editable
SplashScreenGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Игровая камера для отображения главного экрана игры поверх прочих изображений.
@editable
TitleGameCamera:gameplay_camera_fixed_point_device = gameplay_camera_fixed_point_device{}
# Опция в диалоговом окне для запуска игры игроком.
@editable
StartGameDialog:popup_dialog_device = popup_dialog_device{}
# Главный экран игры для отображения.
@editable
TitleScreen:hud_message_device = hud_message_device{}
# Как долго должен отображаться главный экран перед появлением игрового меню.
@editable
GameMenuDelay:float = 2.5
# Экраны заставки, отображаемые перед главным экраном.
@editable
SplashScreens:[]hud_message_device = array{}
# Устройство управления интерфейсом, позволяющее скрыть все внутриигровые элементы интерфейса.
@editable
IntroHUDController:hud_controller_device = hud_controller_device{}
# Устройство управления интерфейсом, отображающее все элементы внутриигрового интерфейса при запуске игры.
@editable
GameHUDController:hud_controller_device = hud_controller_device{}
# Метод уведомления всех устройств о запуске игры.
@editable
GameStart:trigger_device = trigger_device{}
OnBegin<override>()<suspends>:void=
IntroHUDController.Enable()
# Подождать одно обновление симуляции, чтобы всё инициализировалось.
Sleep(0.0)
# Поместить игроков в стазис, чтобы они не могли перемещаться.
ToggleStasisForAllPlayers(true)
# Отобразить ряд экранов заставки.
ShowSplashScreens()
# Скрыть главный экран и игровое меню в самом конце.
# Это отложенное выполнение производится при выходе из текущего блока кода,
# то есть в конце функции OnBegin, после GameStart.Trigger().
defer:
HideTitleAndGameMenu()
# Отобразить главный экран и игровое меню.
ShowTitleAndGameMenu()
# Освободить игроков из стазиса, чтобы они снова могли перемещаться.
ToggleStasisForAllPlayers(false)
# Заменить устройства управления интерфейсом на реальный игровой HUD-интерфейс.
IntroHUDController.Disable()
GameHUDController.Enable()
# Сообщить всем прослушивающим устройствам, что игра запускается!
GameStart.Trigger()
# Отображает главный экран и опцию «Запустить игру».
ShowTitleAndGameMenu()<suspends>:void=
# Добавить камеру главного экрана для всех игроков.
TitleGameCamera.AddToAll()
# Отобразить главный экран.
TitleScreen.Show()
# Подождать GameMenuDelay секунд перед отображением настройки «Запустить игру».
Sleep(GameMenuDelay)
# Отобразить меню «Запустить игру»
StartGameDialog.Show()
# Подождать, когда игрок нажмёт «Запустить игру», прежде чем делать что-то ещё.
StartGameDialog.RespondingButtonEvent.Await()
# Скрыть главный экран и удалить камеру для всех игроков.
HideTitleAndGameMenu():void=
TitleScreen.Hide()
TitleGameCamera.RemoveFromAll()
# Отобразить ряд экранов заставки.
ShowSplashScreens()<suspends>:void=
# Перебирает все экраны заставки.
for (SplashScreen : SplashScreens):
# Показать каждый экран заставки.
SplashScreen.Show()
# Подождать, пока будет отображаться экран заставки, в течение заданного времени.
Sleep(SplashScreen.GetDisplayTime())
# Удалить игровую камеру, используемую для отображения экранов заставки.
SplashScreenGameCamera.Disable()
# Переключить состояние стазиса игрока.
# Если ShouldFreeze имеет значение true, все игроки помещаются в стазис.
# Если ShouldFreeze имеет значение false, все игроки выводятся из стазиса.
ToggleStasisForAllPlayers(ShouldFreeze:logic):void=
for:
Player : GetPlayspace().GetPlayers()
Character := Player.GetFortCharacter[]
do:
if (ShouldFreeze?):
# Поместить игрока в стазис, запретив ему поворачиваться или проявлять эмоции.
Character.PutInStasis(stasis_args{AllowFalling := true, AllowTurning := false, AllowEmotes := false})
else:
# Освободить игрока из стазиса.
Character.ReleaseFromStasis()