Камеры играют ключевую роль во внешнем виде и атмосфере игры. Камеры от третьего лица могут дать игрокам более реальное ощущение пространства, а камеры от первого лица позволяют ближе рассмотреть игровой мир. Переключение камер во время игры может вызывать различные чувства, а переход между разными камерами может разнообразить игровой процесс. Например, вы можете создать забавное платформенное испытание, используя фиксированную камеру для создания секции с боковой прокруткой.
В UEFN вы можете использовать Verse для программирования изменений камеры. Используя устройства для прослушивания событий, вы можете добавить камеру к игроку, чтобы изменить его вид при активации события. В этом примере вы добавите устройство камеры кругового вращения к игроку в конце внутриигрового видео. Вы можете изменить настройки камеры кругового вращения, чтобы имитировать вид от первого лица, а добавив камеру в конце внутриигрового видео, вы можете создать плавный переход от третьего лица к первому. Чтобы разнообразить игровой процесс, в этом примере игрок берёт оружие и размахивает им у двери, запуская внутриигровое видео. Вы можете адаптировать этот пример к вашим потребностям: например, игрок может вращать гаечный ключ, чтобы починить неисправную дверь корабля, или размахивать молотком, чтобы разбить валун и открыть секретную область. Вы также можете более широко применять эти концепции для создания интересных игровых моментов, таких как широкий план при входе в новую зону, переключение на вид сверху вниз, когда игроку нужно решить головоломку, или вид от первого лица для создания пугающей атмосферы.
Следуйте рекомендации этого руководства, чтобы узнать, как создать устройство Verse, которое переводит игрока от третьего лица к первому с помощью внутриигрового видео при открытии двери.
В данном примере используются следующие возможности языка:
-
Class: в этом примере создаётся класс Verse, который активирует внутриигровое видео, когда игрок открывает дверь.
-
Option: вы можете хранить события, на которые можно подписаться, в переменных опции, и отменить подписку на эти события в дальнейшем.
В данном примере используются следующие API:
- Subscribable: вы будете подписываться на события, чтобы узнать, когда игрок войдёт в область рядом с дверью, и предоставить игрокам предмет при взаимодействии с кнопкой.
Настройка уровня
В данном примере используются следующие устройства:
-
1 устройство кнопки. Когда игрок взаимодействует с кнопкой, он получает меч от устройства выдачи предметов.
-
1 устройство выдачи предметов . Устройство выдачи предметов даёт игроку меч, необходимый для прохождения через дверь.
-
1 устройство кнопки с условием. Требуемое оружие устанавливается как предмет-ключ кнопки с условием, и игрок не может пройти через дверь, если у него нет необходимого меча.
-
1 устройство активации при нажатии. Открывает дверь, когда игрок атакует, прислушиваясь к действию ввода огня. Это происходит только тогда, когда игрок находится внутри устройства области, если у игрока есть меч, а дверь ещё не открыта.
-
1 устройство области. Поскольку для открытия двери вам недостаточно любой активации при атаке мечом, устройство области гарантирует, что игроку необходимо находиться рядом с дверью, чтобы открыть её.
-
1 устройства последовательности внутриигрового видео. Чтобы обеспечить плавный переход от вида от третьего лица к виду от первого лица, вы воспроизводите внутриигровое видео, показывающее открывающуюся дверь, и меняете положение камеры так, чтобы оно совпадало с точкой зрения игрока при виде от первого лица.
-
1 устройство камеры кругового вращения. Чтобы создать вид от первого лица для игрока, вы используете камеру кругового вращения, расположенную в груди персонажа, чтобы имитировать точку зрения от первого лица. Это изменение вида происходит только после видео, когда игрок открывает дверь.
-
1 устройство замка. Удерживает дверь в запертом состоянии, чтобы игрок не смог открыть её, пока у него не будет необходимого оружия.
-
1 устройство указателя на карте. Отображает расположение двери на мини-карте, когда игрок берёт в руки оружие.
Выполните следующие действия, чтобы настроить уровень:
Кнопка и устройство выдачи предметов
Чтобы предоставить игроку оружие, необходимое для открытия двери, вы воспользуетесь устройством выдачи предметов и устройством кнопка. Когда игрок взаимодействует с кнопкой, устройство выдачи предметов предоставляет ему оружие. Чтобы добавить эти элементы, выполните следующие действия:
-
Добавьте одно устройство выдачи предметов на уровень.
-
Выберите устройство выдачи предметов в окне Структуре. На панели Сведения устройства в разделе Пользовательские настройки задайте значения следующим образом:
Настройка Значение Пояснение Определение предмета Меч Это оружие, которым игрок открывает дверь. Использовать полученный предмет True В этом примере игрок берёт оружие и сразу же вооружается им. Нажмите на изображение, чтобы увеличить его.
-
Добавьте одно устройство кнопки на уровень.
-
Выберите кнопку в структуре. На панели Сведения устройства в разделе Пользовательские настройки задайте значения следующим образом:
Настройка Значение Пояснение Текст взаимодействия «Взять» Этот текст предлагает игроку взаимодействовать с кнопкой. Кол-во срабатываний 1 В этом примере игрок может взять оружие только один раз. Нажмите на изображение, чтобы увеличить его.
Активация при нажатии
Чтобы узнать, когда игрок взмахивает оружием, вы можете использовать активацию при нажатии, которая прослушивает определённое действие. Когда игрок взмахивает оружием, происходит активация при нажатии. Выполните следующие шаги, чтобы добавить активацию при нажатии.
-
Добавьте одно устройство активации при нажатии на уровень.
-
Выберите активацию при нажатии в структуре. На панели Сведения устройства в разделе Пользовательские настройки задайте значения следующим образом:
Настройка Значение Пояснение Тип ввода Стандартное действие Срабатывание — стандартное действие, которое должна прослушивать активация при нажатии, чтобы узнать, когда игрок взмахивает оружием. Стандартный ввод Срабатывание Срабатывание — действие, которое должна прослушивать активация при нажатии, чтобы узнать, когда игрок взмахивает оружием. Показывать в интерфейсе False Это действие не нужно показывать в интерфейсе. Нажмите на изображение, чтобы увеличить его.
Область
Чтобы убедиться, что игрок находится рядом с дверью при открытии, вы можете использовать устройство области рядом с дверью, которое проверяет, находится ли игрок внутри неё. Чтобы добавить устройство области, выполните следующие действия.
-
Добавьте дверь где-нибудь на вашем уровне. Эту дверь игрок будет открывать с помощью оружия.
-
Добавьте одно устройство области на уровень. Это устройство области должно перекрывать небольшую область перед дверью или область, которую игрок должен атаковать.
-
Измените размер устройства области, изменив его преобразование, чтобы он соответствовал нужной области, в которой игрок должен находиться при атаке. Активация при нажатии будет прослушивать событие срабатывания только тогда, когда игрок находится внутри этой области. Поэтому убедитесь, что она соответствует вашим требованиям.
Нажмите на изображение, чтобы увеличить его.
Замок
Чтобы убедиться, что игрок не сможет открыть дверь до того, как получит оружие, вы можете запереть дверь с помощью устройства замка. Чтобы добавить устройство замка, выполните следующие действия.
-
Добавьте устройство замка и закрепите его на двери.
-
Выберите замок в Структуре. На панели Сведения под Пользовательскими настройками установите для Отображение в игре значение false.
Нажмите на изображение, чтобы увеличить его.
Указатель на карте
Когда место, куда игроку нужно добраться, находится далеко от места, где он взял оружие, игрокам полезно показать, куда нужно идти, с помощью указателя на карте. Соответствующее изображение отображается на их карте и мини-карте. При этом можно активировать пульсацию цели с указанием непосредственно на дверь. Чтобы добавить указатель на карте, выполните следующие действия.
-
Добавьте на уровень устройство Указатель на карте, спрятанное под дверью.
-
Выберите указатель на карте в Структуре. На панели Сведения устройства в разделе Пользовательские настройки:
Настройка Значение Пояснение Включить в начале игры false Указатель на карте включается только после того, как игрок берёт оружие. Маленький значок Выберите значок Выберите значок, который хотите отобразить на мини-карте. Большой значок Выберите значок Выберите значок, который хотите отобразить на карте. Нажмите на изображение, чтобы увеличить его.
Кнопка с условием для предмета
Чтобы узнать, что игрок взмахивает оружием, которое необходимо, чтобы открыть дверь, вы можете использовать кнопку с условием для предмета. Чтобы добавить такую кнопку, выполните следующие действия.
-
Добавьте одно устройство кнопки с условием для предмета на уровень.
-
Выберите эту кнопку в Структуре. На панели Сведения устройства в разделе Пользовательские настройки задайте значения следующим образом:
Настройка Значение Пояснение Удалять предметы-ключи False Вам не потребуется удалять оружие игрока после открытия двери. Определение предмета-ключа 1 Оружие Это оружие, которое игроку нужно, чтобы открыть дверь. Нажмите на изображение, чтобы увеличить его.
Камера кругового вращения
Чтобы симулировать вид от первого лица, вы можете использовать вращающуюся камеру, позволяющую изменить перспективу игрока. Выполните следующие шаги, чтобы добавить вращающуюся камеру.
-
Добавьте одно устройство камеры кругового вращения на уровень.
-
Выберите устройство вращающейся камеры в Структуре. На панели Сведения устройства в разделе Камера задайте значения следующим образом:
Настройка Значение Пояснение Расстояние 0,0 см Параметры, необходимые для вида от первого лица Смещение по оси X 27,0 см Параметры, необходимые для вида от первого лица Смещение по оси Y 0,0 см Параметры, необходимые для вида от первого лица Смещение по оси Z 76,0 см Параметры, необходимые для вида от первого лица Горизонтальная скорость 0,0 см/с Параметры, необходимые для вида от первого лица -
На панели Сведения в секции Переход задайте значения следующим образом:
Настройка Значение Пояснение Время приближения 0,0 с Параметры, необходимые для вида от первого лица Время отдаления 0,1 с Параметры, необходимые для вида от первого лица Тип отдаления Медленное отдаление Параметры, необходимые для вида от первого лица Нажмите на изображение, чтобы увеличить его.
Последовательность внутриигрового видео
Чтобы запустить видео при открытии двери, вам понадобится устройство последовательности внутриигрового видео. Чтобы добавить последовательность внутриигрового видео, выполните следующие действия.
-
Добавьте устройство последовательности внутриигрового видео на уровень.
-
В Каталоге контента создайте последовательность внутриигрового видео, которую хотите использовать на уровне. В последовательности внутриигрового видео используется камера вращения, которую вы установили ранее. Она должна показывать открытие двери при переходе камеры от первоначального ракурса к виду от первого лица. Дополнительную информацию о создании собственных последовательностей внутриигрового видео см. в разделе Создание видеороликов и заставок.
-
На панели Структура выберите последовательность внутриигрового видео. Затем на панели Сведения в разделе Пользовательские настройки назначьте Последовательность своей последовательности внутриигрового видео.
Нажмите на изображение, чтобы увеличить его.
Внутриигровое видео открытия двери с использованием Verse
Чтобы реализовать логику воспроизведения видео открытия двери, используйте устройство Verse. Это устройство прослушивает событие взмаха оружием внутри устройства области, затем воспроизводит последовательность внутриигрового видео, открывает дверь и переводит игрока в режим от первого лица.
Настройка полей
Чтобы создать устройство Verse:
-
Создайте новое устройство Verse, используя Проводник Verse, и назовите его
door_open_cinematic_manager
. -
Над определением класса
door_open_cinematic_manager
добавьте канал записи в журнал сообщений, относящихся к этому устройству. Затем добавьте диспетчер журналов в определение класса для использования с каналом записи в журнал.door_open_channel := class(log_channel){} # Это Verse-устройство творческого режима, которое можно разместить на уровне door_open_cinematic_manager := class(creative_device): Logger:log = log{Channel := door_open_channel}
-
Добавьте следующие поля в определение класса
door_open_cinematic_manager
:-
Редактируемое устройство области под названием
DoorVolume
. Это область, внутри которой должен находиться игрок, чтобы открыть дверь.# Область, внутри которой должен находиться игрок, чтобы открыть дверь. @editable DoorVolume:volume_device = volume_device{}
-
Редактируемое устройство активации при нажатии под названием
FireTrigger
. Оно прослушивает использование игроком своего оружия внутриDoorVolume
.# Активация при нажатии, которая прослушивает, как игрок взмахивает оружием # при нахождении в DoorVolume. @editable FireTrigger:input_trigger_device = input_trigger_device{}
-
Редактируемое устройство кнопки с условием
ConditionalButton
. Оно проверяет, есть ли у игрока правильное оружие, когда он находится внутри устройства области.Кнопка с условием для предмета, которая проверяет, есть ли у игрока правильное оружие. @editable ConditionalButton:conditional_button_device = conditional_button_device{}
-
Редактируемое устройство замка под названием
DoorLock
. Оно позволит держать дверь запертой, если у игрока нет подходящего оружия.# Устройство замка, препятствующее открытию двери. @editable Door:lock_device = lock_device{}
-
Редактируемое устройство последовательности внутриигрового видео под названием
CinematicSequence
. Оно воспроизводит видео, ведущее к переходу камеры при открытии двери.# Устройство последовательности внутриигрового видео, которое воспроизводит видео при открытии двери. @editable CinematicSequence:cinematic_sequence_device = cinematic_sequence_device{}
-
Редактируемое устройство указателя на карте
ObjectiveMarker
. Оно отображает расположение двери на мини-карте, когда игрок берёт в руки оружие.# Устройство указателя на карте, показывающее расположение двери. @editable ObjectiveMarker:map_indicator_device = map_indicator_device{}
-
Редактируемое устройство выдачи предметов
ItemGranter
. Даёт игроку оружие, необходимое для продвижения.# Устройство выдачи предметов даёт игроку необходимое оружие. @editable ItemGranter:item_granter_device = item_granter_device{}
-
Редактируемое устройство кнопки
ItemGrantButton
. АктивируетItemGranter
, чтобы предоставить необходимое оружие.# Кнопка для активации устройства выдачи ItemGranter. @editable ItemGrantButton:button_device = button_device{}
-
Редактируемое устройство камеры вращения
FPSCamera
. Симулирует вид от первого лица и добавляется к игроку после окончания видео.# Камера вращения, имитирующая вид от первого лица. @editable FPSCamera:gameplay_camera_orbit_device = gameplay_camera_orbit_device{}
-
Переменная
logic
IsDoorOpen
. Это поле отслеживает, открыта ли дверь. Если открыта, последовательность не воспроизводится.# Переменная, которая отслеживает, открыта дверь или нет. var IsDoorOpen:logic = false
-
Переменная типа
option
иcancelable
с названиемFireSubscription
. Хранит подписку наFireTrigger
PressedEvent
. Эта последовательность внутриигрового видео должна срабатывать только тогда, когда игрок находится рядом с дверью. Эта отменяемая подписка гарантируетотписку
игрока от FireTrigger, если он уйдёт слишком далеко.# Отменяемая подписка на устройство FireTrigger. var FireSubscription:?cancelable = false
-
Воспроизведение видеоряда
Когда дверь открывается, воспроизводится внутриигровое видео, которое показывает открытие двери и меняет вид игрока от третьего лица к первому. Выполните следующие действия, чтобы активировать внутриигровое видео, когда игрок открывает дверь.
-
Добавьте новый метод
PlayCinematic()
в определение класса door_open_cinematic_manager. Добавьте новый методPlayCinematic()
в определение классаdoor_open_cinematic_manager
. Эта функция действует на игроке, открывающем дверь. Затем она воспроизводит внутриигровое видео и открывает дверь с помощью устройства замка.# Воспроизводит кинематографический ролик и открывает дверь. PlayCinematic(Agent:agent):void=
-
В
PlayCinematic()
сначала воспроизводится внутриигровое видео изCinematicSequence
, затем снимается замок и дверь открывается с использованиемUnlock()
иOpen()
соответственно.# Воспроизводит кинематографический ролик и открывает дверь. PlayCinematic(Agent:agent)<suspends>:void= Logger.Print("Игрок держит предмет, воспроизводит кинематографический ролик...") CinematicSequence.Play() # Снять замок, затем открыть дверь. Door.Unlock(Agent) Door.Open(Agent) set IsDoorOpen = true
-
Наконец, измените для игрока вид от третьего лица на вид от первого, добавив к камеру вращения с помощью
AddTo()
, затем отключите маркер цели. Готовая функцияPlayCinematic()
должна выглядеть следующим образом:# Воспроизводит кинематографический ролик и открывает дверь. PlayCinematic(Agent:agent)<suspends>:void= Logger.Print("Игрок держит предмет, воспроизводит кинематографический ролик...") CinematicSequence.Play() # Снять замок, затем открыть дверь. Door.Unlock(Agent) Door.Open(Agent) set IsDoorOpen = true # Добавить к агенту камеру от первого лица. Когда видео закончится, # агент получит вид от первого лица. FPSCamera.AddTo(Agent) Logger.Print("Камера изменена") # Отключить маркер цели ObjectiveMarker.Disable()
-
Внутриигровое видео должно воспроизводиться только тогда, когда игрок держит нужный предмет, и не должно воспроизводиться вновь, если дверь уже открыта. Чтобы обработать эту логику, добавьте новый метод
CheckCinematic()
к определению класса door_open_cinematic_manager. Эта функция действует на игрока вDoorVolume
и проверяет, есть ли у него необходимые предметы.# Проверить, есть ли у игрока нужный предмет и не открыта ли уже дверь. CheckCinematic(Agent:agent):void=
-
В
CheckCinematic()
проверьте, держит ли игрок предмет, зарегистрированный вConditionalButton
с использованиемIsHoldingItem[]
. Также проверьте, имеет лиIsDoorOpen
значение false, чтобы убедиться, что дверь ещё не открыта. Если это так,spawn{}
используется на функцииPlayCinematic()
, передающей игрока, открывающего дверь. Готовая функцияCheckCinematic()
должна выглядеть следующим образом:# Проверить, есть ли у игрока нужный предмет и не открыта ли уже дверь. CheckCinematic(Agent:agent):void= if: ConditionalButton.IsHoldingItem[Agent] and not IsDoorOpen? then: spawn{PlayCinematic(Agent)}
Отслеживание игрока и выдача предметов
Поскольку игроку необходимо взмахивать оружием, находясь внутри DoorVolume
, чтобы открыть дверь, устройство активации при нажатии должно прослушивать это событие. Выполните следующие действия, чтобы активация при нажатии прослушивала, когда игрок взмахнёт оружием.
-
Добавьте новый метод
OnPlayerEntersVolume()
в определение классаdoor_open_cinematic_manager
. Эта функция берёт агента и регистрирует его с помощьюFireTrigger
, когда он входит вDoorVolume
.# Регистрирует агента с помощью FireTrigger, когда он входит в DoorVolume. OnPlayerEntersVolume(Agent:agent):void= Logger.Print("Агент вошёл в DoorVolume")
-
При
OnPlayerEntersVolume()
зарегистрируйте агента сFireTrigger
, вызвавRegister()
. Затем установите дляFireSubscription
результат подпискиFireTrigger.PressedEvent
наPlayCinematic()
. Готовая функцияOnPlayerEntersVolume()
должна выглядеть следующим образом:# Регистрирует агента с помощью FireTrigger, когда он входит в DoorVolume. OnPlayerEntersVolume(Agent:agent):void= Logger.Print("Агент вошёл в DoorVolume") FireTrigger.Register(Agent) # Оформите подписку PressedEvent на PlayCinematic и сохраните эту подписку в FireSubscritition. set FireSubscription = option{(FireTrigger.PressedEvent.Subscribe(PlayCinematic))}
-
Когда игрок выходит из
DoorVolume
, вам необходимо прекратить отслеживание подписки наFireTrigger.PressedEvent
, поскольку игрок должен быть в состоянии активировать внутриигровое видео только в том случае, если он не находится внутри области. Чтобы обработать это, добавьте новый методOnPlayerExitsVolume()
к определению классаdoor_open_cinematic_manager
.# Отменить регистрацию агента с помощью FireTrigger, когда он покидает DoorVolume. OnPlayerExitsVolume(Agent:agent):void=
-
При
OnPlayerExitsVolume()
сначала отмените регистрацию агента сFireTrigger
с помощьюUnregister()
. Затем получите подписку внутриFireSubscription
и отмените её. Готовый методOnPlayerExitsVolume()
должен выглядеть следующим образом:# Отменить регистрацию агента с помощью FireTrigger, когда он покидает DoorVolume. OnPlayerExitsVolume(Agent:agent):void= Logger.Print("Агент вышел из DoorVolume") FireTrigger.Unregister(Agent) # Отмените подписку на FireSubscription. if (SubscriptionToCancel := FireSubscription?): SubscriptionToCancel.Cancel()
-
Когда игрок взаимодействует с
ItemButton
, ему предоставляется оружие, необходимое для продвижения. На мини-карте также появляется маркер цели, который показывает путь к двери, если игрок ещё не нашёл её. Чтобы обработать это, добавьте новый методGrantItem()
, который помещает агента (agent
) в определение классаdoor_open_cinematic_manager
. ВнутриGrantItem()
вызовитеGrantItem
для переданного агента и включите маркер цели. Готовый методGrantItem()
должен выглядеть следующим образом:# Предоставляет агенту предмет при взаимодействии с ItemGrantButton # и включает ObjectiveMarker. GrantItem(Agent:agent):void= ItemGranter.GrantItem(Agent) ObjectiveMarker.Enable()
Связывание всех элементов
Теперь вы можете подписать каждое событие на функцию, связанную с ним, и протестировать свой код в игре.
-
В
OnBegin()
подписатьItemGrantButton.InteractedWithEvent
на функциюGrantItem()
. Затем подписатьDoorVolume.AgentEntersEvent
иDoorVolume.AgentExitsEvent
на связанные функции. Ваша функцияOnBegin()
должна выглядеть следующим образом:# Выполняется при запуске устройства в работающей игре OnBegin<override>()<suspends>:void= # Подписать каждое событие на функцию, связанную с ним. ItemGrantButton.InteractedWithEvent.Subscribe(GrantItem) DoorVolume.AgentEntersEvent.Subscribe(OnPlayerEntersVolume) DoorVolume.AgentExitsEvent.Subscribe(OnPlayerExitsVolume)
-
Сохраните свой код и скомпилируйте его.
-
В UEFN выберите устройство DoorOpenCinematicManager на своём уровне. В структуре назначьте каждую редактируемую ссылку устройству на уровне.
Нажмите на изображение, чтобы увеличить его.
-
Нажмите Запустить сеанс на панели инструментов 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.
door_open_log := class(log_channel){}
door_open_cinematic_manager := class(creative_device):
Logger:log = log{Channel := door_open_log}
# Активация при нажатии, которая прослушивает, как игрок взмахивает оружием
# при нахождении в DoorVolume.
@editable
FireTrigger:input_trigger_device = input_trigger_device{}
# Устройство последовательности внутриигрового видео, которое воспроизводит видео при открытии двери.
@editable
CinematicSequence:cinematic_sequence_device = cinematic_sequence_device{}
Кнопка с условием для предмета, которая проверяет, есть ли у игрока правильное оружие.
@editable
ConditionalButton:conditional_button_device = conditional_button_device{}
# Устройство замка, препятствующее открытию двери.
@editable
Door:lock_device = lock_device{}
# Область, внутри которой должен находиться игрок, чтобы открыть дверь.
@editable
DoorVolume:volume_device = volume_device{}
# Камера вращения, имитирующая вид от первого лица.
@editable
FPSCamera:gameplay_camera_orbit_device = gameplay_camera_orbit_device{}
# Устройство выдачи предметов даёт игроку необходимое оружие.
@editable
ItemGranter:item_granter_device = item_granter_device{}
# Кнопка, активирующая ItemGranter.
@editable
ItemGrantButton:button_device = button_device{}
# Устройство указателя на карте, показывающее расположение двери.
@editable
ObjectiveMarker:map_indicator_device = map_indicator_device{}
# Переменная, которая отслеживает, открыта дверь или нет.
var IsDoorOpen:logic = false
# Отменяемая подписка на устройство FireTrigger.
var FireSubscription:?cancelable = false
# Выполняется при запуске устройства в работающей игре
OnBegin<override>()<suspends>:void=
# Подписать каждое событие на функцию, связанную с ним.
ItemGrantButton.InteractedWithEvent.Subscribe(GrantItem)
DoorVolume.AgentEntersEvent.Subscribe(OnPlayerEntersVolume)
DoorVolume.AgentExitsEvent.Subscribe(OnPlayerExitsVolume)
# Регистрирует агента с помощью FireTrigger, когда он входит в DoorVolume.
OnPlayerEntersVolume(Agent:agent):void=
Logger.Print("Агент вошёл в DoorVolume")
FireTrigger.Register(Agent)
# Оформите подписку PressedEvent на PlayCinematic и сохраните эту подписку в FireSubscritition.
set FireSubscription = option{(FireTrigger.PressedEvent.Subscribe(CheckCinematic))}
# Отменить регистрацию агента с помощью FireTrigger, когда он покидает DoorVolume.
OnPlayerExitsVolume(Agent:agent):void=
Logger.Print("Агент вышел из DoorVolume")
FireTrigger.Unregister(Agent)
# Отмените подписку на FireSubscription.
if (SubscriptionToCancel := FireSubscription?):
SubscriptionToCancel.Cancel()
# Предоставляет агенту предмет при взаимодействии с ItemGrantButton
# и включает ObjectiveMarker.
GrantItem(Agent:agent):void=
ItemGranter.GrantItem(Agent)
ObjectiveMarker.Enable()
# Проверить, есть ли у игрока нужный предмет и не открыта ли уже дверь.
CheckCinematic(Agent:agent):void=
if:
ConditionalButton.IsHoldingItem[Agent] and not IsDoorOpen?
then:
spawn{PlayCinematic(Agent)}
# Воспроизводит кинематографический ролик и открывает дверь.
PlayCinematic(Agent:agent)<suspends>:void=
Logger.Print("Игрок держит предмет, воспроизводит кинематографический ролик...")
CinematicSequence.Play()
# Снять замок, затем открыть дверь.
Door.Unlock(Agent)
Door.Open(Agent)
set IsDoorOpen = true
# Добавить к агенту камеру от первого лица. Когда видео закончится,
# агент получит вид от первого лица.
FPSCamera.AddTo(Agent)
Logger.Print("Камера изменена")
# Отключить маркер цели
ObjectiveMarker.Disable()
Самостоятельная работа
Изучив это руководство, вы узнали, как использовать Verse для воспроизведения видео, когда игрок открывает дверь, и как перейти от камеры от третьего лица к камере от первого лица.
Используя полученные знания, попробуйте выполнить следующее:
-
Можете ли вы выполнить другие типы перехода камеры, например переход к виду для сайд-скроллера?
-
А как насчёт специальной кнопки для изменения угла камеры? Сможете разработать уровень, для прохождения которого потребуется несколько ракурсов камеры?
-
Можете ли использовать активацию при нажатии для отрицательных штрафов, например, предлагая игрокам пройти через какой-либо участок без прыжков, и воспроизвести видео, если им не удастся это сделать?