В игре есть две головоломки, созданные с помощью Verse, и первая — это головоломка из лампочек с тегами. Головоломка из лампочек с тегами используется в потайной комнате за лестницей в нижнем подвале.

Вы можете скопировать и вставить код из последнего раздела руководства, но мы рекомендуем создавать головоломку постепенно, чтобы получить представление о том, как работает язык Verse.
Во второй головоломке используется жёстко заданный логический ключ для проверки состояния каждого устройства «Переключатель», чтобы гарантировать, что переключатели включаются в надлежащем порядке.
При включении правильного переключателя воспроизводится звук успешного выполнения задания. Аналогичным образом, при включении неправильного переключателя подаётся звуковой сигнал ошибки и выводится соответствующее сообщение. При успешном решении головоломки выдаётся финальный звуковой сигнал успешного выполнения задания и выводится соответствующее сообщение, а также активируются четыре генератора предметов.
Для проверки допустимых и недопустимых состояний, а также для запуска любого устройства, связанного с состоянием, можно использовать массив. В этом примере ключ ответа жёстко задан, чтобы даже новички в программировании смогли разобраться в коде.
Настройка устройств головоломки
Для этой головоломки вам потребуются следующие устройства:

Присвойте генераторам предметов имена, соответствующие предметам, которые из них появляются.
Устройство «Переключатель»
Установите переключатель на стене рядом с дверью и задайте для него следующие настройки
Настройка | Значение | Пояснение |
---|---|---|
Модель устройства | Предохранитель | В этой головоломке игроки должны переключать предохранители. |
Звук | False | Различные звуковые схемы для допустимого, недопустимого и успешного состояний решения головоломки будут воспроизводиться аудиоустройствами. |
Время взаимодействия | 0,1 | Взаимодействие происходит мгновенно. |
Радиус взаимодействия | 1,0 | Для взаимодействия с переключателем игрок должен стоять на расстоянии не более одной плитки от него. |
Проверка состояния в начале игры | False | Устройство Verse само запустит эту проверку. |
Скопируйте ещё три устройства «Переключатель» на стену и расположите их в ряд.
Аудиоустройство
Разместите аудиоустройство посередине квадрата. Задайте для него следующие настройки:
Настройка | Значение | Пояснение |
---|---|---|
Перезапустить звук при активации | True | Звук должен воспроизводиться более одного раза и каждый раз с самого начала. |
Воспроизводить при попадании | False | Устройство Verse само запускает аудиоустройство. |
Скопируйте и разместите ещё два аудиоустройства. Переименуйте устройства и добавьте звуковую схему в каждое из них:
-
Допустимо — для аудиопроигрывателя звука допустимого состояния Match_Round_Change_01_Cue.
-
Недопустимо — для аудиопроигрывателя звука недопустимого состояния Player_Checkpoint_Trigger_Cue.
-
Решено — для аудиопроигрывателя звука успешного решения CTF_Return_Team_Cue.
Устройство «Триггер»
Разместите устройство «Триггер» справа от переключателей и задайте для него следующие настройки:
Настройка | Значение | Пояснение |
---|---|---|
Отображение в игре | False | Устройство будет оставаться невидимым во время игры. |
Включить в начале игры | False | Управлять устройством «Триггер» будет устройство Verse. |
Активация игроком | False | Управлять устройством «Триггер» будет устройство Verse. |
Активация транспортными средствами | False | Управлять устройством «Триггер» будет устройство Verse. |
Активация с помощью Sequencer | False | Управлять устройством «Триггер» будет устройство Verse. |
Активация водой | False | Управлять устройством «Триггер» будет устройство Verse. |
Количество срабатываний | True, 10 | Нужно, чтобы триггер можно было использовать в головоломке более одного раза |
Визуальные эффекты триггера | False | Визуальные эффекты отсутствуют. |
Звуковые эффекты триггера | False | За воспроизведение звуков отвечают аудиоустройства. |
Переименуйте устройство в «Триггер недопустимого состояния».
Устройство для вывода сообщений в интерфейсе
Задайте для устройства для вывода сообщений в интерфейсе следующие настройки:
Настройка | Значение | Пояснение |
---|---|---|
Сообщение | Сообщение интерфейса «Недопустимо»:
Сообщение интерфейса FindItems:
|
Эти сообщения для головоломки относятся к состояниям неудачи и успеха. |
Время отображения | Сообщение интерфейса «Недопустимо» — 3,0 Сообщение интерфейса «Решено» — 5,0 |
Время отображения сообщений. |
После этого перенесите устройство для вывода сообщений в интерфейсе за пределы стены подвала, чтобы его не было видно из комнаты, и скопируйте его.
Присвойте следующие имена устройствам для вывода сообщений в интерфейсе:
-
Сообщение интерфейса «Найти предметы»
-
Сообщение интерфейса «Недопустимо»
Устройство Verse
Теперь пора создать программу Verse, которая управляет головоломкой. Создайте новое устройство Verse с именем switch_state_puzzle с помощью проводника Verse и перетащите это устройство на уровень. (Чтобы узнать, как создать новое устройство Verse, см. Создание собственного устройства с помощью Verse.)
Разработка головоломки
Включение переключателей в правильной последовательности позволяет игрокам пройти дальше в игре «Побег из комнаты».
Когда игрок включает переключатели в правильной последовательности, раздаётся металлический звук. Если переключатели включены неверно, раздаётся гудок и переключатели сбрасываются. При недопустимых состояниях всплывает сообщение, а при успешном решении головоломки воспроизводится звуковой сигнал успеха, отображается сообщение с подсказкой и появляются предметы.
Логика работы головоломки представлена на блок-схеме ниже.
Нажмите на изображение, чтобы увеличить его.
Правильное решение головоломки представлено в таблице ниже.
Матрица решения головоломки | ||||
---|---|---|---|---|
Переключатели | 2 | 3 | 1 | 4 |
1 | X | |||
2 | X | X | ||
3 | X | X | X | |
4 | X | X | X | X |
Используемые возможности языка Verse
-
if
,then
,else
: с помощью выраженийif
,then
иelse
можно определять допустимые и недопустимые состояния каждого устройства «Переключатель» и других устройств, зависящих от состояний. -
failure
: контексты, допускающие неоднозначность, используются для определения текущего состояния головоломки и её решения. -
for
: выражениеfor
используется для перебора всех переключателей в головоломке и выполнения операций над ними.
Используемые API
-
редактируемые свойства: определённые свойства Verse-устройств доступны для настройки непосредственно через редактор UEFN. Изменяя эти свойства, вы сможете создавать новые конфигурации головоломок.
-
события устройства: события
InteractedWithEvent
кнопок используются для управления состоянием игры.
Взаимодействие с переключателями
Подумайте о том, какие действия требуются для решения головоломки. Сначала нужно проверить, регистрирует ли устройство Verse событие, когда игрок взаимодействует с переключателем. Для этого сначала напишите псевдокод, чтобы проверить концепцию взаимодействия.
-
В определении класса switch_state_puzzle добавьте следующие редактируемые поля.
-
Редактируемый массив типа
switch_device
с именемSwitches
. Он будет содержать ссылки на все переключатели в головоломке. -
Массив переменных типа
cancelable
с именемSwitchSubscriptions
. В нём будет содержаться ссылка на каждую подписку switch_device, которую можно использовать для сброса переключателей.
-
switch_state_puzzle := class(creative_device):
@editable
Switches : []switch_device = array{} # Ссылки на переключатели, с которыми могут взаимодействовать игроки
var SwitchSubscriptions : []cancelable = array{}
-
В том же файле создайте новый класс
switch_event_handler
. В этом классе будут определены устройство Verse и переключатели. -
Добавьте новый метод
OnSwitchPressed()
в классswitch_event_handler
. Этот метод проверяет устройство Verse на взаимодействие с игроком, вызываяCheckSequence()
в классеitem_switch_puzzle
. Он также выводит сообщение Нажат каждый раз при взаимодействии с переключателем.
## Класс обработчика событий для обработки взаимодействий с переключателями
## Этот обработчик событий привязан к событиям в цикле выше
switch_event_handler := class():
PuzzleDevice : item_switch_puzzle
Switch : switch_device
OnSwitchPressed(InPlayer : agent) : void =
Print("Нажат")
PuzzleDevice.CheckSequence(InPlayer)
Запись данных в журнал
Один из способов проверить работу кода — это делать записи в журнале. Сохранение сообщений позволяет посмотреть, какие части кода работают правильно. Добавьте запись данных в журнал перед классом устройства творческого режима.
Print<native><public>(Message:[]char, Level:log_level):void
Ссылки на переключатели
Теперь нужно определить способ обращения к устройствам «Переключатель» в головоломке. Ссылки на устройства «Переключатель» позволяют перебирать все переключатели и добавлять обработчики событий к каждому переключателю во время игры.
-
В
OnBegin()
в классеswitch_state_puzzle
добавьте выражениеfor
для перебора всех элементовSwitch
в массивеSwitchers
. Получите индекс каждогоSwitch
и сохраните его в переменнойSwitchIndex
. -
Добавьте функцию вывода в журнал в выражении for для определения переключателя, с которым осуществляется взаимодействие при выполнении программы, указав в команде Print аргумент Переключатель {SwitchIndex} добавлен.
-
Поскольку решение головоломки основано на определённом порядке состояний переключателей, каждый раз при смене состояния какого-либо переключателя нужно проверять, решена ли головоломка. Для этого будем использовать класс
switch_event_handler
, который вы определили ранее, для прослушивания двух разных событий для каждого переключателя. Для каждого переключателя создайте две подписки: одну дляTurnedOnEvent
, а другую дляTurnedOffEvent
. Подпишите оба события на функциюOnSwitchPressed()
классаswitch_event_handler
. Передайте ссылку как наswitch_state_puzzle
, так и на текущийSwitch
.
## Выполняется при запуске устройства в работающей игре
OnBegin<override>()<suspends>:void=
Print("Загрузка головоломки с переключателями")
# Перебор всех переключателей в цикле и добавление обработчиков событий для каждого переключателя
for (SwitchIndex -> Switch : Switches):
Print("Переключатель {SwitchIndex} добавлен")
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
- Сохраните сценарий в Visual Studio Code, а затем в UEFN нажмите Verse -> Собрать код Verse.
Каждый раз при включении или выключении переключателя во время тестирования уровня в журнал должны записываться индекс переключателя, с которым вы взаимодействовали, и слово Нажат.
Состояния головоломки
Каждый переключатель в головоломке может иметь два состояния: допустимое и недопустимое.
Чтобы решить головоломку, игроку нужно включить переключатели в определённом порядке. Чтобы реализовать этот порядок в коде, нужно определить последовательность допустимых состояний для всех переключателей и проверять соблюдение этой последовательности всякий раз, когда игрок обновляет состояние переключателя.
-
Добавьте новый метод
ValidState()
в классswitch_state_puzzle
. Этот метод принимает строку и воспроизводит аудиоролик всякий раз, когда игрок переводит переключатель в допустимое состояние — таким образом игрок получает звуковую обратную связь, подтверждающую, что он на правильном пути. -
В
ValidState()
выведите переданную строкуState
и вызовитеPlay()
дляValidAudioPlayer
, настроенного ранее.
# Действия, которые необходимо выполнить в случае допустимого состояния
ValidState(State : string) : void =
# Воспроизведение звука проверки
Print("Допустимо {State}")
ValidAudioPlayer.Play()
- Добавьте новый метод
InvalidState()
в классswitch_state_puzzle
. Этот метод сбрасывает все переключатели после воспроизведения звука, когда игрок устанавливает недопустимое состояние.
# Действия, которые необходимо выполнить в случае недопустимого состояния
InvalidState(InPlayer : agent) : void =
# Воспроизведение гудка
# Сброс всех переключателей
Print("Недопустимо")
- В
InvalidState()
сообщите игроку, что он установил переключатель в недопустимое состояние — выведите в журнал Недопустимо и воспроизведите аудиоролик, вызвавPlay()
дляInvalidAudioPlayer
, настроенного ранее. Вам также нужно вызватьTrigger()
дляInvalidTrigger
иShow()
дляInvalidHUDMessage
.
# Действия, которые необходимо выполнить в случае недопустимого состояния
InvalidState(InPlayer : agent) : void =
# Воспроизведение гудка
# Сброс всех переключателей
Print("Недопустимо")
InvalidAudioPlayer.Play()
InvalidTrigger.Trigger()
InvalidHUDMessage.Show()
Создайте цикл for, в котором производится подписка на события устройств «Переключатель». С помощью оператора print выводится информация о том, какие переключатели и в какой последовательности нажимает игрок.
# Перебор всех переключателей в цикле и добавление обработчиков событий для каждого переключателя
for (SwitchIndex -> Switch : Switches):
Print("Переключатель {SwitchIndex} добавлен")
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
В цикле for пройдите по всем переключателям и выключите каждый из них. Поскольку для метода переключателя TurnOff()
требуется игрок-инициатор, передайте игрока, установившего переключатель в недопустимое состояние.
## Перебор всех переключателей в цикле и их выключение
for (SwitchIndex -> Switch : Switches):
Switch.TurnOff(InPlayer)
- Сохраните свой код, вернитесь в UEFN и выберите Verse > Собрать код Verse.
Затем нужно создать в классе item_switch_puzzle
логику, которая перебирает в цикле все переключатели и сверяет их состояние с матрицей головоломки, чтобы определить, в каком состоянии (допустимом или недопустимом) оказался переключатель после нажатия.
Классификация состояний переключателя
Проверка допустимости состояния переключателя выполняется в методе CheckSequence, в котором используется выражение for для проверки текущего состояния переключателя. Чтобы определить, является ли изменение состояния переключателя допустимым, используйте оператор if
, чтобы установить, переключение каких переключателей в последовательности допустимо, а каких них.
- Добавьте новый метод
CheckSequence()
. В этот метод передаётся игрок, инициировавший изменение состояния переключателя, и массив логических значений, соответствующих состояниям переключателей. ВCheckSequence()
создайте циклfor
для перебора всех переключателей в массивеSwitches
. Получите индекс каждого переключателя в массиве и сохраните его в переменнойSwitchIndex
. В цикле for проверьте состояние каждого переключателя, вызвавGetCurrentState[]
. После этого сохраните состояние переключателя в журнале.
# Функция проверки последовательности переключателей
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} включён") else Print("{SwitchIndex} выключен")
Затем нужно создать последовательность состояний для проверки с помощью CheckSequence()
. Для этого добавим новую функциональность в метод OnSwitchPressed()
класса switch_event_handler
.
Состояния последовательности
Создайте последовательность состояний переключателей с помощью массивов. Каждый массив используется для проверки допустимости последовательности включения переключателей. Записывайте последовательность действий игрока с переключателями в журнал, чтобы установить, были ли нажаты переключатели и является ли последовательность допустимой, сохраняя в журнале номер состояния последовательности (“Первое”, “Второе”, “Третье” или “Четвёртое”).
- В
OnSwitchPressed()
, внутри оператораif
, вызовитеCheckSequence()
, передав как игрока, так и новый массив логических значений. Этот новый массив должен соответствовать вашей последовательности переключателей, причём значенияfalse
представляют выключенные переключатели, а значенияtrue
— включённые. Для переключателя, который игроки должны нажимать первым, задайте значениеtrue
, а для остальных —false
. Если вызовCheckSequence[]
выполняется успешно, вызовитеValidState()
, передав "Первое", чтобы сообщить, что нажат первый переключатель.
OnSwitchPressed(InPlayer : agent) : void =
Print("Нажат")
PuzzleDevice.CheckSequence(InPlayer)
- Жёстко закодируйте ключ ответа, определяющий состояние всех переключателей в головоломке, в том порядке, в каком они должны быть нажаты.
if:
# Проверьте, совпадает ли состояние переключателей с жёстко закодированной последовательностью
# [выкл.], [выкл.], [вкл.], [выкл.] (первое состояние)
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Первое")
else if:
# Проверьте, совпадает ли состояние переключателей с последовательностью
#[вкл.], [выкл.], [вкл.], [выкл.] (второе состояние)
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Второе")
else if:
# Проверьте, совпадает ли состояние переключателей с последовательностью
#[вкл.], [вкл.], [вкл.], [выкл.] (третье состояние)
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Третье")
else if:
# Проверьте, совпадает ли состояние переключателей с последовательностью
#[вкл.], [вкл.], [вкл.], [вкл.], (четвёртое состояние, головоломка решена)
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
- Наконец, добавьте в конце выражение
else
, в котором вызываетсяInvalidState()
. Вызов произойдёт, если какой-либо из вызововCheckSequence[]
не даст результата.
else:
# Это состояние не является допустимым, поэтому оно недопустимо
InvalidState(InPlayer)
- Ваш код
switch_event_handler
теперь должен выглядеть следующим образом:
# Функция проверки последовательности переключателей
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} включён") else Print("{SwitchIndex} выключен")
if:
# Проверьте, совпадает ли состояние переключателей с жёстко закодированной последовательностью
# [выкл.], [выкл.], [вкл.], [выкл.] (первое состояние)
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Первое")
else if:
# Проверьте, совпадает ли состояние переключателей с последовательностью
#[вкл.], [выкл.], [вкл.], [выкл.] (второе состояние)
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Второе")
else if:
# Проверьте, совпадает ли состояние переключателей с последовательностью
#[вкл.], [вкл.], [вкл.], [выкл.] (третье состояние)
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Третье")
else if:
# Проверьте, совпадает ли состояние переключателей с последовательностью
#[вкл.], [вкл.], [вкл.], [вкл.], (четвёртое состояние, головоломка решена)
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
else:
# Это состояние не является допустимым, поэтому оно недопустимо
InvalidState(InPlayer)
- Сохраните свой код, вернитесь в UEFN и выберите Verse > Собрать код Verse.
Теперь во время включения переключателей в игре в журнал будут заноситься следующие записи:
-
Загрузка головоломки с переключателями — в начале игры
-
Переключатель {SwitchIndex} добавлен — в момент добавления переключателя в цикле
-
Нажат — в момент включения переключателя игроком
-
Допустимо {State} — если игрок включает верный переключатель в нужной последовательности
-
Недопустимо — если игрок включает неверный переключатель
Если в журнал заносятся верные записи о нажатии переключателей, можно добавить больше редактируемых устройств в класс item_switch_puzzle и сделать так, чтобы в каждом состоянии выполнялись определённые действия.
Добавление устройств
В случае успешного решения головоломки игроком и её прохождения по состояниям переключателей ValidStates вплоть до состояния CompletedState результат такого успешного решения должен к чему-то приводить, например к выдаче предметов.
То же самое относится к состояниям InvalidStates. Если игрок решает головоломку неправильно, сценарий должен определять это и сообщать игроку, что нужно попробовать ещё раз. Для этого нужно добавить дополнительные устройства в класс item_switch_puzzle.
Когда вы добавите редактируемые устройства в свой сценарий, они отобразятся в пользовательских настройках устройства Verse, где вы сможете подключить эти устройства к устройству Verse, чтобы они функционировали в игре согласно сценарию Verse.
- Добавьте следующие @editable устройства в item_switch_puzzle:
@editable
InvalidTrigger : trigger_device = trigger_device{}
@editable
InvalidHUDMessage : hud_message_device = hud_message_device{}
@editable
InvalidAudioPlayer : audio_player_device = audio_player_device{}
@editable
ValidAudioPlayer : audio_player_device = audio_player_device{}
@editable
FindItemsHUDMessage : hud_message_device = hud_message_device{}
@editable
CompletedAudioPlayer : audio_player_device = audio_player_device{}
@editable
ItemSpawners : item_spawner_device = item_spawner_device{} #Захватывает все генераторы предметов, связанные с этой головоломкой
- Добавьте новый метод
CompletedState()
в классitem_switch_puzzle
. Этот метод обрабатывает действия, выполняемые после успешного решения головоломки.
## Действия, выполняемые после успешного решения головоломки
CompletedState() : void =
# Воспроизвести звук успешного решения
# Отключить все переключатели
# Создать предметы в привязанных генераторах предметов
Print("Решено")
1. Добавьте в метод CompletedState()
выражение for, в котором перебираются все генераторы предметов в массиве ItemSpawners
. Включите каждый генератор предметов с помощью Enable()
, а затем вызовите SpawnItem()
, чтобы выдать игроку награду за решение головоломки.
## Перебор всех генераторов предметов в цикле, чтобы включить каждый генератор и создать в нём предмет.
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
- Как только головоломка будет успешно решена, нужно будет вызвать
Play()
дляCompletedAudioPlayer
, настроенного ранее, и создать металлические предметы в генераторах предметов, используяItemSpawnerIndex
и вызовыEnable1
иSpawnItem
. Сообщите игроку, что ему нужно поискать появившиеся предметы, вызвавShow()
вFindItemsHUDMessage
. Затем нужно прервать взаимодействие игрока с переключателями. Добавьте второе выражение for для перебора в цикле всех переключателей вSwitches
и отключите их, вызвавDisable()
.
# Действия, выполняемые после успешного решения головоломки
CompletedState() : void =
# Воспроизвести звук успешного решения
# Отключить все переключатели
# Создать предметы в привязанных генераторах предметов
Print("Решено")
# Перебор всех генераторов предметов в цикле, чтобы включить каждый генератор и создать в нём предмет.
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
# Воспроизводит специальную звуковую схему, сообщающую об успешном решении головоломки
CompletedAudioPlayer.Play()
# Выводит сообщение интерфейса, в котором игрокам предлагается найти новые созданные предметы
FindItemsHUDMessage.Show()
# Отключить все переключатели после успешного решения головоломки
for (SwitchIndex -> Switch : Switches):
Switch.Disable()
- Сохраните свой код, вернитесь в UEFN и выберите Verse > Собрать код Verse.
Теперь эти устройства добавлены в устройство «Головоломка с переключателями предметов» в UEFN.
Выберите устройства
Все @editable устройства добавлены в устройство Verse. Далее нужно привязать устройства, использовавшиеся для создания головоломки, к устройству Verse. Для этого выберите item_switch_puzzle в окне Структура, и все ячейки для устройств отобразятся на панели Сведения. Вам нужно будет просто добавить устройства в соответствующие ячейки.
-
Добавьте устройства Переключатель головоломки к 4-м элементам массива Switches в разделе Головоломка с переключателями предметов.
-
Добавьте Триггер недопустимого состояния в ячейку InvalidTrigger
-
Добавьте Сообщение интерфейса «Недопустимо» в ячейку InvalidHUDMessage.
-
Добавьте Аудиопроигрыватель звука недопустимого состояния в ячейку InvalidAudioPlayer.
-
Добавьте Аудиопроигрыватель звука допустимого состояния в ячейку ValidAudioPlayer.
-
Добавьте устройство Сообщение интерфейса «Найти» в ячейку FindHUDMessage.
-
Добавьте Аудиопроигрыватель звука успешного решения в ячейку CompletedAudioPlayer.
-
Добавьте Генераторы предметов к 4-м элементам массива ItemSpawners.
-
Снимите флажок Отображение в игре, чтобы устройство Verse было невидимым во время игры.
Теперь можно выполнить игровой тест уровня и посмотреть, как головоломки делают игру «Побег из комнаты» более увлекательной.
Следующий раздел
После создания головоломки с переключателями вы сможете написать сценарий Verse для автоматической телепортации, который будет переносить игроков в комнату ожидания в нижнем подвале домика после окончания открывающего видеоролика.