Dostępne są dwie łamigłówki utworzone za pomocą Verse. Pierwsza z nich to łamigłówka z otagowanymi światłami. Łamigłówka z otagowanymi światłami jest używana w ukrytym pomieszczeniu za schodami w przestrzeni pod piwnicą.

Możesz skopiować i wkleić kod z ostatniej sekcji samouczka, jednak zdecydowanie zalecamy utworzenie łamigłówki krok po kroku od nowa, aby zapoznać się ze sposobem działania języka Verse.
Druga łamigłówka wykorzystuje zakodowany klucz logiczny do sprawdzania poszczególnych urządzeń przełączników, aby upewnić się, że właściwy przełącznik został aktywowany we właściwej kolejności.
Po aktywowaniu właściwego przełącznika przełącznik ten odtworzy dźwięk powodzenia. Podobnie aktywowanie w trakcie sekwencji niewłaściwego przełącznika spowoduje wyemitowanie dźwięku niepowodzenia i wyświetlenie komunikatu. Po rozwiązaniu łamigłówki odtwarzany jest końcowy dźwięk powodzenia oraz komunikat, a cztery generatory przedmiotów zostają aktywowane.
Możesz wykorzystać tablicę do sprawdzania stanów poprawności i niepoprawności, a także aktywowania dowolnego urządzenia powiązanego z danym stanem. W tym przykładzie klucz odpowiedzi został zakodowany, aby ułatwić osobom, które dopiero stawiają pierwsze kroki w pisaniu kodu, co właściwie robi kod.
Konfiguracja urządzeń łamigłówki
Do wykonania tej łamigłówki potrzebne będą następujące urządzenia:
-
1 x urządzenie Verse

Zmień nazwy generatorów przedmiotów zgodnie z przedmiotami, które spawnują.
Urządzenie przełącznika
Umieść urządzenie przełącznika na ścianie obok drzwi i skonfiguruj poniższe opcje.
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Model urządzenia | Wyłącznik obwodu | Chcemy, aby gracze w tej łamigłówce przełączali wyłącznik obwodu. |
Dźwięk | False | Urządzenia audio będą odtwarzać różne sygnały dźwiękowe dla stanu prawidłowego i nieprawidłowego wyboru oraz pomyślnego rozwiązania łamigłówki. |
Czas interakcji | 0.1 | Interakcja powinna być natychmiastowa. |
Obszar interakcji | 1.0 | Gracz musi stać w promieniu jednego kafelka od przodu przełącznika, aby móc wejść z nim w interakcję. |
Sprawdź stan na początku gry | False | Zamiast tego, urządzenie Verse będzie uruchamiało tę kontrolę. |
Skopiuj trzy kolejne przełączniki na ścianie i umieść je w rzędzie obok siebie.
Urządzenie audio
Na środku kwadratu umieść urządzenie audio. Skonfiguruj opcje audio zgodnie z poniższą tabelą.
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Restartuj dźwięk przy aktywacji | True | Chcesz, aby dźwięk można było odtwarzać więcej niż raz, za każdym razem zaczynając od początku. |
Odtwarzaj przy trafieniu | False | Urządzenie Verse będzie wyzwalało urządzenie audio. |
Skopiuj urządzenie audio jeszcze dwa razy. Zmień nazwy urządzeń i dodaj do każdego z nich sygnał dźwiękowy:
-
Prawidłowy wybór — dla urządzenia audio odtwarzającego dźwięk prawidłowego wyboru odtwarzaj Match_Round_Change_01_Cue.
-
Nieprawidłowy wybór — dla urządzenia audio odtwarzającego dźwięk nieprawidłowego wyboru odtwarzaj Player_Checkpoint_Trigger_Cue.
-
Ukończona łamigłówka — dla urządzenia audio odtwarzającego dźwięk ukończenia łamigłówki odtwarzaj CTF_Return_Team_Cue
Urządzenie aktywatora
Z prawej strony przełączników umieść urządzenie aktywatora i skonfiguruj poniższe opcje.
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Widoczność w grze | False | To urządzenie nie musi być widoczne w grze. |
Włącz na początku gry | False | To urządzenie Verse będzie sterowało urządzeniem aktywatora. |
Aktywacja przez gracza | False | To urządzenie Verse będzie sterowało urządzeniem aktywatora. |
Aktywacja przez pojazdy | False | To urządzenie Verse będzie sterowało urządzeniem aktywatora. |
Aktywacja przez sekwencery | False | To urządzenie Verse będzie sterowało urządzeniem aktywatora. |
Aktywacja przez wodę | False | To urządzenie Verse będzie sterowało urządzeniem aktywatora. |
Liczba aktywacji | True, 10 | Chcesz umożliwić wielokrotne wyzwalanie w trakcie rozwiązywania łamigłówki. |
Efekt wizualny aktywacji | False | Efekty wizualne nie są konieczne. |
Efekt dźwiękowy aktywacji | False | To urządzenie audio będzie sterowało dźwiękiem. |
Zmień nazwę urządzenia aktywatora dla nieprawidłowego wyboru.
Urządzenie komunikatów w interfejsie
Skonfiguruj pierwsze urządzenie komunikatów w interfejsie zgodnie z poniższymi opcjami.
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Komunikat | Komunikat w interfejsie o nieprawidłowym wyborze:
Komunikat FindItems w interfejsie:
|
Te komunikaty do łamigłówki będą obsługiwały stan powodzenia oraz niepowodzenia. |
Czas wyświetlania | Komunikat w interfejsie o nieprawidłowym wyborze – 3.0 Komunikat w interfejsie o ukończeniu – 5.0 |
Ilość czasu, przez jaki komunikat będzie wyświetlany. |
Następnie przenieś urządzenie komunikatów w interfejsie poza ścianę piwnicy, aby nie było widoczne w pomieszczeniu, i je skopiuj.
Zmień nazwę każdego z urządzeń komunikatów w interfejsie:
-
Komunikat w interfejsie o znalezieniu przedmiotów
-
Komunikat w interfejsie o nieprawidłowym wyborze
Urządzenie Verse
Teraz możesz przystąpić do utworzenia programu Verse, który będzie sterował łamigłówką. Utwórz nowe urządzenie Verse o nazwie switch_state_puzzle, korzystając z Eksploratora Verse, i przeciągnij je do poziomu. (Aby dowiedzieć się, jak utworzyć nowe urządzenie Verse, patrz Tworzenie własnego urządzenia przy użyciu Verse).
Projekt łamigłówki
Włączenie przełączników we właściwej kolejności umożliwi graczom pokonanie tego punktu w escape roomie.
Gdy gracz włączy przełącznik zgodnie z poprawną kolejnością, rozlegnie się dźwięk dzwonka. Jeśli włączy niewłaściwy przełącznik, rozlegnie się dźwięk brzęczyka, a przełączniki zostaną zresetowane. W przypadku nieprawidłowego wyboru pojawi się komunikat, a pomyślne rozwiązanie łamigłówki spowoduje odtworzenie dźwięku powodzenia, wyświetlenie komunikatu z podpowiedzą i wygenerowanie przedmiotów.
Logikę łamigłówki można zwizualizować za pomocą poniższego schematu blokowego.
Kliknij obraz, aby go powiększyć.
Poprawne rozwiązanie łamigłówki zostało zaprezentowane w poniższej tabeli.
Macierz rozwiązania łamigłówki | ||||
---|---|---|---|---|
Przełączniki | 2 | 3 | 1 | 4 |
1 | X | |||
2 | X | X | ||
3 | X | X | X | |
4 | X | X | X | X |
Zastosowane funkcje języka Verse
-
if
,then
,else
: Za pomocą wyrażeńif
,then
ielse
można wyszukać stany prawidłowe i nieprawidłowe poszczególnych urządzeń przełączników, a także innych urządzeń bazujących na stanach. -
failure
: Konteksty niepowodzenia służą do ustalania aktualnego stanu łamigłówki i jej rozwiązania. -
for
: Wyrażeniefor
umożliwia iterowanie po poszczególnych przełącznikach łamigłówki i wykonywanie na nich operacji.
Zastosowane interfejsy API
-
Edytowalne właściwości: W UEFN uwidocznionych jest wiele właściwości urządzeń tworzonych w Verse, dzięki czemu możesz dostosowywać je w edytorze. Modyfikując te właściwości, zyskasz możliwość tworzenia nowych konfiguracji łamigłówki.
-
Zdarzenia urządzenia: Zdarzenia
InteractedWithEvent
przycisków służą do kontrolowania stanu gry.
Interakcja z przełącznikami
Przemyśl kroki wymagane do wykonania łamigłówki. Najpierw chcesz sprawdzić, czy urządzenie Verse rejestruje zdarzenie, gdy gracz zaznaczy pole. W tym celu najpierw napisz pseudokod, aby zweryfikować koncepcję interakcji.
-
Pod definicją klasy switch_state_puzzle dodaj następujące pola edytowalne.
-
Edytowalna tablica typu
switch_device
o nazwieSwitches
. Będzie się ona odnosić do wszystkich przełączników w łamigłówce. -
Tablica zmiennych typu
cancelable
o nazwieSwitchSubscriptions
. Zawiera ona odwołanie do każdej subskrypcji switch_device, za pomocą której można zresetować przełączniki.
-
switch_state_puzzle := class(creative_device):
@editable
Switches : []switch_device = array{} #Odwołuje się do przełączników, z którymi gracze mogą wchodzić w interakcje
var SwitchSubscriptions : []cancelable = array{}
-
W tym samym pliku utwórz nową klasę o nazwie
switch_event_handler
. W tej klasie zidentyfikujesz urządzenie Verse oraz przełączniki. -
Dodaj nową metodę
OnSwitchPressed()
do klasyswitch_event_handler
. Metoda ta sprawdza zgodność urządzenia Verse z interakcją gracza, wywołującCheckSequence()
w klasieitem_switch_puzzle
. Po każdej interakcji z przełącznikiem wyświetla ona również komunikat Kliknięty.
## Klasa procedury obsługi zdarzeń do obsługi interakcji z przełącznikami
## Ta procedura obsługi zdarzeń jest dołączona do zdarzeń w powyższej pętli
switch_event_handler := class():
PuzzleDevice : item_switch_puzzle
Switch : switch_device
OnSwitchPressed(InPlayer : agent) : void =
Print("Kliknięty")
PuzzleDevice.CheckSequence(InPlayer)
Dodanie rejestratora
Jednym ze sposobów na sprawdzenie skuteczności kodu jest wydrukowanie go do dziennika. Umożliwia to wizualne sprawdzenie, które części kodu działają zgodnie z planem, poprzez wyświetlenie komunikatów. Nad klasą urządzenia Trybu kreatywnego dodaj rejestrator.
Print<native><public>(Message:[]char, Level:log_level):void
Tworzenie odwołań do przełączników
Teraz musisz znaleźć sposób, aby odwołać się do urządzeń przełączników w łamigłówce. Odwoływanie się do urządzeń przełączników pozwala w sposób zapętlony przechodzić przez kolejne przełączniki i dodawać procedury obsługi zdarzeń do każdego przełącznika, gdy gra jest uruchomiona.
-
W
OnBegin()
w klasieswitch_state_puzzle
dodaj wyrażeniefor
, aby wykonać iterację po każdym elemencieSwitch
z tablicySwitches
. Pobierz indeks każdego elementuSwitch
i zapisz go w zmiennejSwitchIndex
. -
Dodaj funkcję Print pod wyrażeniem for identyfikującym przełącznik, z którym gracz wchodzi w interakcję w czasie wykonywania, wpisując w poleceniu Print komunikat Dodano przełącznik {SwitchIndex}.
-
Rozwiązanie łamigłówki polega na uzyskaniu konkretnej kolejności stanów przełączników, dlatego za każdym razem, gdy gracz zmieni stan przełącznika, trzeba sprawdzić, czy łamigłówka została rozwiązana. W tym celu wykorzystasz zdefiniowaną wcześniej klasę
switch_event_handler
do nasłuchiwania dwóch różnych zdarzeń na każdy przełącznik. Dla każdego przełącznika utwórz dwie subskrypcję, jedną dla zdarzeńTurnedOnEvent
przełączników, a drugą dla zdarzeńTurnedOffEvent
przełączników. Zasubskrybuj obydwa zdarzenia do funkcjiOnSwitchPressed()
klasyswitch_event_handler
. Przekaż odwołanie zarówno doswitch_state_puzzle
, jak i do bieżącego elementuSwitch
.
## Wykonywane po uruchomieniu urządzenia w aktywnej grze
OnBegin<override>()<suspends>:void=
Print("Ładowanie łamigłówki z przełącznikami")
# Wykonanie pętli przejścia przez poszczególne przełączniki i dodanie procedur obsługi zdarzeń do każdego przełącznika
for (SwitchIndex -> Switch : Switches):
Print("Dodano przełącznik {SwitchIndex}")
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
- Zapisz skrypt w Visual Studio Code, a następnie w UEFN kliknij kolejno opcje Verse > Skompiluj kod Verse.
Podczas testowania poziomu przy każdym włączeniu lub wyłączeniu przełącznika w dzienniku powinien się wyświetlać indeks przełącznika, z którym nawiązano interakcje, wraz ze słowem Kliknięty.
Stany łamigłówki
Każdy przełącznik w łamigłówce może przyjmować dwa stany, prawidłowy i nieprawidłowy.
Aby rozwiązać łamigłówkę, gracz musi włączyć przełączniki w określonej kolejności. Aby wdrożyć tę kolejność w kodzie, trzeba zdefiniować sekwencję prawidłowych stanów dla każdego przełącznika, a następnie sprawdzać tę sekwencję za każdym razem, gdy gracz zaktualizuje stan przełącznika.
-
Dodaj nową metodę
ValidState()
do klasyswitch_state_puzzle
. Metoda ta pobiera ciąg tekstowy i odtwarza klip audio za każdym razem, gdy gracz zmieni stan przełącznika na prawidłowy, przekazując graczowi dźwiękową informację zwrotną, aby wiedział, że jest na właściwym tropie. -
W
ValidState()
wyświetl przekazany ciąg tekstowyState
i wywołajPlay()
na skonfigurowanym wcześniej urządzeniuValidAudioPlayer
.
# Czynności do wykonania, gdy stan jest prawidłowy
ValidState(State : string) : void =
# Odtwórz dźwięk oznaczający prawidłowy wybór
Print("Prawidłowo {State}")
ValidAudioPlayer.Play()
- Dodaj nową metodę
InvalidState()
do klasyswitch_state_puzzle
. Gdy gracz wyzwoli stan nieprawidłowy, ta metoda zresetuje wszystkie przełączniki po odtworzeniu dźwięku.
# Czynności do wykonania, gdy stan jest nieprawidłowy
InvalidState(InPlayer : agent) : void =
# Odtwórz dźwięk brzęczyka
# Wyczyść wszystkie przełączniki
Print("Zły wybór!")
- W
InvalidState()
poinformuj gracza, że aktywował nieprawidłowy stan, wyświetlając komunikat Zły wybór! i odtwarzając klip audio poprzez wywołaniePlay()
na skonfigurowanym wcześniej urządzeniuInvalidAudioPlayer
. Musisz również wywołaćTrigger()
na urządzeniuInvalidTrigger
iShow()
na urządzeniuInvalidHUDMessage
.
# Czynności do wykonania, gdy stan jest nieprawidłowy
InvalidState(InPlayer : agent) : void =
# Odtwórz dźwięk brzęczyka
# Wyczyść wszystkie przełączniki
Print("Zły wybór!")
InvalidAudioPlayer.Play()
InvalidTrigger.Trigger()
InvalidHUDMessage.Show()
Utwórz pętlę, która subskrybuje zdarzenia na urządzeniach przełącznika. Polecenie print wskazuje, które przełączniki przełącza gracz, a także sekwencję, w jakiej przełączono przełączniki.
# Wykonanie pętli przejścia przez poszczególne przełączniki i dodanie procedur obsługi zdarzeń do każdego przełącznika
for (SwitchIndex -> Switch : Switches):
Print("Dodano przełącznik {SwitchIndex}")
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
W pętli for wykonaj pętlę przez wszystkie przełączniki, wyłączając każdy z nich. Metoda TurnOff()
przełącznika wymaga gracza-inicjatora, dlatego przekaż gracza, który aktywował stan nieprawidłowy.
## Wykonanie pętli przejścia po przełącznikach i wyłączenie każdego z nich
for (SwitchIndex -> Switch : Switches):
Switch.TurnOff(InPlayer)
- Zapisz swój kod i cofnij się do UEFN, a następnie wybierz kolejno Verse > Skompiluj kod Verse.
Następnie musisz utworzyć w klasie item_switch_puzzle
logikę, która będzie wykonywała pętlę przejścia po poszczególnych przełącznikach i będzie weryfikować zgodność ich stanu z macierzą łamigłówki w celu ustalenia, pod który stan (prawidłowy lub nieprawidłowy) przypada dany przełącznik.
Ustalanie stanów przełączników
Sprawdzenie poprawności przełączenia przełącznika odbywa się poprzez utworzenie metody CheckSequence, która wykorzystuje wyrażenie for do sprawdzania aktualnego stanu przełącznika. Aby zdefiniować, czy zmiana stanu przełącznika jest prawidłowa, można użyć instrukcji if
do zdefiniowania, które przełączenie przełącznika jest prawidłowe w sekwencji, a które nie.
- Dodaj nową metodę
CheckSequence()
. Metoda ta przyjmuje gracza jako inicjującego zmiany stanów przełączników, a także tablicę wartości logicznych odpowiadających stanom przełącznika. WCheckSequence()
utwórz pętlęfor
, aby wykonać iterację po wszystkich przełącznikach na tablicySwitches
. Pobierz indeks każdego przełącznika na tablicy i zapisz go w zmiennejSwitchIndex
. W pętli for sprawdź stan każdego przełącznika, wywołującGetCurrentState[]
. Następnie zapisz stan przełącznika w dzienniku.
# Funkcja do sprawdzania poprawności sekwencji przełączników
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} włączony") else Print("{SwitchIndex} wyłączony")
Teraz musisz utworzyć sekwencję stanów do sprawdzania zgodności za pomocą CheckSequence()
. W tym celu dodasz nową funkcjonalność do metody OnSwitchPressed()
procedury obsługi zdarzeń switch_event_handler
.
Stany sekwencji
Utwórz sekwencję stanów przełączników za pomocą tablic. Każda tablica sprawdza poprawność kolejności, w jakiej przełączane są przełączniki. Zapisz w dzienniku sekwencję czynności gracza wykonanych na przełącznikach, wykorzystując rejestrator do zarejestrowania, czy przełączniki zostały Kliknięte oraz czy sekwencja jest prawidłowa, zapisując numer sekwencyjny w rejestratorze ("Jeden", "Dwa", "Trzy" i "Cztery").
- W
OnSwitchPressed()
, wewnątrz instrukcjiif
wywołajCheckSequence()
, przekazując zarówno gracza, jak i nową tablicę wartości logicznych. Nowa tablica powinna odpowiadać serii przełączników, przy czym wartościfalse
powinny reprezentować przełączniki wyłączone, a wartościtrue
przełączniki włączone. Dla przełącznika, który gracze mają nacisnąć jako pierwszy, ustaw wartośćtrue
, a dla pozostałych przełączników wartość false. Jeśli wywołanie doCheckSequence[]
się powiedzie, wywołajValidState()
, przekazując komunikat "Jeden", który będzie oznaczał pierwszy naciśnięty przełącznik.
OnSwitchPressed(InPlayer : agent) : void =
Print("Kliknięty")
PuzzleDevice.CheckSequence(InPlayer)
- Zakoduj klucz odpowiedzi dla przełączeń poszczególnych przełączników łamigłówki, zgodnie z kolejnością, w jakiej przełączniki mają być naciskane.
if:
# Sprawdź, czy stany są prawidłowe, i zakoduj sprawdzanie poprawności stanów
# Stan numer jeden [wył.],[wył.],[wł.],[wył.]
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Jeden")
else if:
# Sprawdź, czy stany są prawidłowe
#Stan numer dwa [wł.], [wył.], [wł.], [wył.]
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Dwa")
else if:
# Sprawdź, czy stany są prawidłowe
#Stan numer trzy [wł.], [wł.], [wł.], [wył.]
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Trzy")
else if:
# Sprawdź, czy stany są prawidłowe
#Stan numer cztery [wł.], [wł.], [wł.], [wł.], łamigłówka rozwiązana
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
- Na końcu dodaj wyrażenie
else
, które wywołujeInvalidState()
. Będzie ono wykonywane, jeśli którekolwiek z wywołań doCheckSequence[]
zakończy się niepowodzeniem.
else:
# Nie jest to stan prawidłowy, więc jest nieprawidłowy
InvalidState(InPlayer)
- Uzyskany kod
switch_event_handler
powinien wyglądać następująco.
# Funkcja do sprawdzania poprawności sekwencji przełączników
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} włączony") else Print("{SwitchIndex} wyłączony")
if:
# Sprawdź, czy stany są prawidłowe, i zakoduj sprawdzanie poprawności stanów
# Stan numer jeden [wył.],[wył.],[wł.],[wył.]
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Jeden")
else if:
# Sprawdź, czy stany są prawidłowe
#Stan numer dwa [wł.], [wył.], [wł.], [wył.]
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Dwa")
else if:
# Sprawdź, czy stany są prawidłowe
#Stan numer trzy [wł.], [wł.], [wł.], [wył.]
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Trzy")
else if:
# Sprawdź, czy stany są prawidłowe
#Stan numer cztery [wł.], [wł.], [wł.], [wł.], łamigłówka rozwiązana
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
else:
# Nie jest to stan prawidłowy, więc jest nieprawidłowy
InvalidState(InPlayer)
- Zapisz swój kod i cofnij się do UEFN, a następnie wybierz kolejno Verse > Skompiluj kod Verse.
Teraz, po włączeniu przełączników w grze, w dzienniku powinny pojawiać się następujące informacje:
-
Ładowanie łamigłówki z przełącznikami – gdy gra się rozpocznie
-
Dodano przełącznik {SwitchIndex} – po dodaniu przełącznika do pętli
-
Kliknięty – gdy gracz włączy przełącznik
-
Prawidłowo {State} – jeśli gracz włączy właściwy przełącznik w odpowiedniej kolejności
-
Nieprawidłowy – jeśli gracz włączy niewłaściwy przełącznik
Jeśli dziennik prawidłowo rejestruje przełączenia przełączników, do klasy item_switch_puzzle można dodać więcej edytowalnych urządzeń i ustawić dla każdego z tych stanów jakieś zadanie.
Dodawanie urządzeń
Gdy gracz pomyślnie rozwiąże łamigłówkę, a łamigłówka wykona pętlę przejść przez stany ValidStates wszystkich przełączników, aż do stanu CompletedState, pomyślny wynik powinien powodować jakieś działanie, na przykład przyznanie przedmiotów.
To samo dotyczy również stanów InvalidStates. Skrypt powinien przewidywać ewentualność, że gracz rozwiąże łamigłówkę błędnie, i informować gracza o konieczności ponownej próby. W tym celu musisz dodać dodatkowe urządzenia do klasy item_switch_puzzle.
Dodanie edytowalnych urządzeń do skryptu sprawi, że pojawią się one w opcjach użytkownika urządzenia Verse, gdzie można połączyć urządzenia z urządzeniem Verse, aby działały w grze w taki sposób, jakby były zapisane w skrypcie Verse.
- Dodaj następujące urządzenia z właściwością @editable do 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{} #Przechwytuje wszystkie generatory przedmiotów powiązane z tą łamigłówką
- Dodaj nową metodę
CompletedState()
do klasyitem_switch_puzzle
. Ta metoda obsługuje czynności wykonywane po rozwiązaniu łamigłówki.
## Czynności do wykonania po rozwiązaniu łamigłówki
CompletedState() : void =
# Odtwórz dźwięk oznaczający pomyślne rozwiązanie
# Ustaw wszystkie przełączniki jako wyłączone
# Zespawnuj przedmioty za pomocą dołączonych generatorów przedmiotów
Print("Rozwiązane")
1. Do metody CompletedState()
dodaj wyrażenie for, które będzie wykonywało iterację po poszczególnych generatorach przedmiotów w ItemSpawners
. Włącz poszczególne generatory przedmiotów za pomocą Enable()
, a następnie wywołaj SpawnItem()
, aby przyznać graczowi nagrodę za rozwiązanie łamigłówki.
## Wykonanie pętli przejść po generatorach przedmiotów umożliwiające wywołanie włączenia i zespawnowania przedmiotu w każdym generatorze przedmiotów
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
- Gdy łamigłówka zostanie poprawnie rozwiązana, musisz wywołać
Play()
na skonfigurowanym wcześniej urządzeniuCompletedAudioPlayer
, zespawnować metalowe elementy na generatorach przedmiotów za pomocąItemSpawnerIndex
, a następnie wywołaćEnable1
iSpawnItem
. Poinformuj gracza, że musi znaleźć nowo zespawnowane przedmioty, wywołującShow()
w komunikacieFindItemsHUDMessage
. Ponadto nie chcesz, aby gracz kontynuował interakcję z przełącznikami. Dodaj drugie wyrażenie for, aby wykonać pętlę po wszystkich przełącznikach wSwitches
i wyłączyć je poprzez wywołanieDisable()
.
# Czynności do wykonania po rozwiązaniu łamigłówki
CompletedState() : void =
# Odtwórz dźwięk oznaczający pomyślne rozwiązanie
# Ustaw wszystkie przełączniki jako wyłączone
# Zespawnuj przedmioty za pomocą dołączonych generatorów przedmiotów
Print("Rozwiązane")
# Wykonanie pętli przejść po generatorach przedmiotów umożliwiające wywołanie włączenia i zespawnowania przedmiotu w każdym generatorze przedmiotów
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
# Odtwórz specjalny sygnał dźwiękowy oznaczający rozwiązanie sekwencji łamigłówki
CompletedAudioPlayer.Play()
# Odtwórz komunikat w interfejsie informujący gracza, aby poszukał nowo zespawnowanych przedmiotów
FindItemsHUDMessage.Show()
# Po prawidłowym rozwiązaniu łamigłówki wyłącz wszystkie przełączniki
for (SwitchIndex -> Switch : Switches):
Switch.Disable()
- Zapisz swój kod i cofnij się do UEFN, a następnie wybierz kolejno Verse > Skompiluj kod Verse.
Teraz te urządzenia są dodane do urządzenia łamigłówki z przełącznikami generującymi przedmioty w UEFN.
Wybór urządzeń
Wszystkie urządzenia z właściwością @editable zostały dodane do urządzenia Verse. Teraz musisz dołączyć do urządzenia Verse te urządzenia, które zostały wyciągnięte w celu utworzenia łamigłówki. W tym celu wybierz item_switch_puzzle w Outlinerze, a wówczas w panelu Szczegóły widoczne będą sloty wszystkich urządzeń. Musisz jedynie dopasować urządzenie do slotu.
-
Dodaj urządzenia przełączników łamigłówki do 4 elementów tablicy przełączników w obszarze Łamigłówka z przełącznikami generującymi przedmioty.
-
Dodaj urządzenie aktywatora dla nieprawidłowego wyboru do slotu InvalidTrigger
-
Dodaj Komunikat w interfejsie dla nieprawidłowego wyboru do slotu InvalidHUDMessage.
-
Dodaj Odtwarzacz dźwięku dla nieprawidłowego wyboru do slotu InvalidAudioPlayer.
-
Dodaj Odtwarzacz dźwięku dla prawidłowego wyboru do slotu ValidAudioPlayer.
-
Dodaj urządzenie Komunikat w interfejsie dla znalezienia do slotu FindHUDMessage.
-
Dodaj Odtwarzacz dźwięku dla ukończenia do slotu CompletedAudioPlayer .
-
Dodaj generatory przedmiotów do 4 elementów tablicy ItemSpawners.
-
Usuń zaznaczenie opcji Widoczność podczas gry, aby ukryć urządzenie Verse w trakcie gry.
Teraz możesz przeprowadzić test gry swojego poziomu i zobaczyć, jak łamigłówka uatrakcyjnia przygodę w escape roomie.
Następna sekcja
Gdy łamigłówka oparta na stanach przełączników będzie działać, możesz utworzyć skrypt Verse automatycznego teleportowania, który będzie przenosił graczy od punktu rozpoczęcia przy wprowadzającej sekwencji filmowej do pomieszczenia, w przestrzeni pod piwnicą chaty, gdzie gracze będą przetrzymywani, gdy odtwarzanie sekwencji się zakończy.