Szablon parkouru przy użyciu Verse pokazuje, jak utworzyć tryb gry, w którym gracze strategicznie manewrują między przeszkodami i platformami, aby zbierać baterie.
W tym trybie gry gracze muszą zebrać cztery baterie, aby ukończyć poziom. Gdy znajdą ukrytą baterię, czas się wydłuży. Gdy czas upłynie, gracz powróci do początku.
Ten szablon demonstruje niektóre podstawowe funkcje języka, takie jak:
-
Pętle For
-
Subskrypcje
-
Tablice
-
API urządzenia
W tym szablonie nie używa się złożonych pojęć, takich jak współbieżność.
Omówienie
Poniżej przedstawiono dokładną kolejność kroków potrzebnych do odtworzenia tej wyspy oraz ich omówienie:
-
Utwórz nowy projekt i zmodyfikuj ustawienia wyspy, aby skonfigurować grę.
-
Zbuduj arenę.
-
Skonfiguruj urządzenia.
-
Dodaj skrypt Verse.
Tworzenie nowego projektu i konfiguracja gry
-
Otwórz UEFN i utwórz nowy pusty projekt.
-
W Outlinerze wybierz urządzenie Ustawienia wyspy i znajdź Opcje użytkownika – Zasady gry.
-
Zmodyfikuj Opcje użytkownika, jak pokazano poniżej.
Opcja Wartość Wyjaśnienie Warunek zwycięstwa w grze Najwięcej punktów wygrywa Grę wygra gracz, który zdobędzie najwięcej punktów. **Niszczenie przy użyciu kilofa Brak Kilof nie uszkadza otoczenia. Rozpocznij grę z kilofem False Gracze rozpoczynają grę, nie mając kilofów. Automatycznie podnoś przedmioty Tak Gracze będą automatycznie podnosić przedmioty, które napotkają. Zezwól na wspinaczkę/sprint/ślizganie/uderzanie barkiem True Gracze będą mogli uprawiać parkour w otoczeniu. Warunek zwycięstwa w rundzie Wynik Rundę wygrają gracze, którzy zdobędą najwięcej punktów. Pierwsza kolumna tabeli Wynik Pierwsza kolumna tabeli wyników będzie zawierała wynik.
Budowanie areny
Ta mapa wykorzystuje Galerię rekwizytów cybermiasta, którą można znaleźć w Fortnite > Galerie > Rekwizyty.
Odtwórz tę mapę wraz z platformami i przeszkodami, przy których użyciu gracze mogą uprawiać parkour.
Konfiguracja urządzeń
W tym samouczku wykorzystano następujące urządzenia:
-
1 x koniec gry
-
1 x licznik czasu
-
1 x urządzenie Verse
Urządzenie Panelu startowego gracza

Do spawnowania graczy na mapie użyj urządzenia Panelu startowego gracza. Na początku mapy umieść panel startowy dla każdego gracza. To urządzenie znajduje się w Fortnite > Urządzenia > Panel startowy gracza.
Aby skonfigurować to urządzenie, skonfiguruj Opcje użytkownika w następujący sposób:
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Widoczność podczas gry | False | To urządzenie nie będzie widoczne w grze. |
Urządzenie przyznawacza przedmiotów

W UEFN przeciągnięcie przedmiotu jednorazowego z Szuflady zawartości automatycznie umieszcza go w urządzeniu Generatora przedmiotów. Przeciągnij baterię do mapy. Znajdziesz ją w Fortnite > Przedmioty > Bateria.
Aby skonfigurować to urządzenie, skonfiguruj Opcje użytkownika w następujący sposób:
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Czas przed spawnem | 0.1 | Określa ilość czasu, zanim przedmiot się zespawnuje. |
Odtwórz przedmiot po określonym czasie | False | Podniesiona bateria się nie zrespawnuje. |
Widoczność podstawy urządzenia podczas gry | False | To urządzenie nie będzie widoczne podczas gry. |
Dodatkowa amunicja do broni | False | Bronie nie dają dodatkowej amunicji. |
Podnieś po przejechaniu | True | Gracze automatycznie podniosą przedmiot. |
Skalowanie przedmiotu | 2.0 | Określa wielkość baterii. |
Skopiuj i wklej to urządzenie jeszcze cztery razy i rozmieść urządzenia na mapie.
Urządzenie końca gry

Umieść urządzenie końca gry, które zakończy grę, gdy zostanie aktywowane.
Aby skonfigurować to urządzenie, skonfiguruj Opcje użytkownika w następujący sposób:
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Własny komunikat zwycięstwa | wpisz tekst | Wpisz tekst, który ma się wyświetlać zwycięskiemu graczowi. |
Urządzenie przestrzeni obrażeń

Urządzenie przestrzeni obrażeń to granica, w obrębie której gracze mogą odnieść obrażenia. Umieść to urządzenie pod mapą i ustaw szerokość strefy, głębokość i wysokość tak, aby obejmowały dół areny i natychmiast likwidowały graczy, którzy spadną.
Aby skonfigurować to urządzenie, skonfiguruj Opcje użytkownika w następujący sposób:
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Obrażenia | 500 | Urządzenie wyrządza obrażenia na tyle poważne, że natychmiast likwiduje graczy, którzy spadną. |
Urządzenie licznika czasu

Umieść urządzenie licznika czasu obok urządzenia końca gry. Licznik czasu będzie odliczał do zera, aż gracz zostanie zlikwidowany i będzie musiał zacząć od nowa.
Aby skonfigurować to urządzenie, skonfiguruj Opcje użytkownika w następujący sposób:
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Czas trwania | 30 | Licznik czasu będzie odliczał przez 30 sekund. |
Rozpocznij w chwili rozpoczęcia gry | True | Licznik czasu zaczyna odliczanie z chwilą rozpoczęcia gry. |
Dotyczy | Gracz | Gdy licznik czasu rozpocznie odliczanie, dotyczy ono konkretnego gracza. |
Sukces po odliczeniu | False | Gdy licznik czasu odliczy do zera, nie będzie się to liczyło jako sukces. |
Widoczność podczas gry | Ukryte | Urządzenie nie będzie widoczne podczas gry. |
Tekst przy odliczaniu przez licznik | wpisz tekst | Wpisz tekst licznika, który ma się wyświetlać. |
Komunikat interfejsu

Użyj urządzenia komunikatu interfejsu, aby wyświetlać graczom ważne informacje.
Aby skonfigurować to urządzenie, skonfiguruj Opcje użytkownika w następujący sposób:
Opcja | Wartość | Wyjaśnienie |
---|---|---|
Czas wyświetlania | 2.0 | Komunikat będzie się wyświetlał przez dwie sekundy, po czym zniknie. |
Pokaż na początku rundy | False | Komunikat nie będzie się wyświetlał na początku rundy, a w momencie podniesienia baterii. |
Dodawanie skryptów Verse
Dodaj następujące skrypty Verse, zacznij od odwoływania się do urządzeń przy użyciu funkcji @editable.
Kod możesz skopiować w takiej kolejności, w jakiej jest napisany. Komentarze w skrypcie są dodane jako objaśnienia.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
log_parkour := class(log_channel){}
# To jest urządzenie utworzone w Verse, które można umieścić na poziomie
# W tym przykładowym skrypcie gracze uprawiają parkour, a celem gry jest zebranie 4 baterii, zanim licznik czasu odliczy do zera
#
# Pierwsze kroki:
# https://dev.epicgames.com/documentation/pl-pl/uefn/learn-programming-with-verse-in-unreal-editor-for-fortnite
parkour_race_script := class(creative_device):
Logger : log = log{Channel:=log_parkour}
# Odwołanie urządzenia do miejsca spawnu gracza
@editable
PlayerSpawnDevice : player_spawner_device = player_spawner_device{}
## Urządzenie końca gry dla zwycięstwa
@editable
EndGameVictoryDevice : end_game_device = end_game_device{}
# Licznik czasu dla tego trybu gry
@editable
TimerDevice : timer_device = timer_device{}
# Informacja zwrotna w postaci komunikatu interfejsu, wyświetlana graczowi, który znajdzie baterię
@editable
HUDMessageBattery : hud_message_device = hud_message_device{}
# Tablica generatorów przedmiotów, które mamy w grze.
@editable
BatteryItemSpawners : []item_spawner_device = array{}
@editable
SecretBatteryItemSpawner : item_spawner_device = item_spawner_device{}
# Ustawiana ilość czasu dodawanego, gdy gracz znajdzie ukrytą baterię
@editable
SecretBatteryTimeReward : float = 10.0
# Deklaracja liczby całkowitej reprezentującej, ile baterii zebrał gracz
var BatteriesCollected : int = 0
Powyższy skrypt pokazuje, jak używać @editable, aby uwidaczniać urządzenia trybu kreatywnego, tablice i wartości float dla UEFN. Urządzenia w Verse trzeba najpierw zdefiniować, aby skrypt mógł je potem wywołać.
# Komunikaty wyświetlane w momencie zebrania baterii
BatteryCollectedMessage<localizes>(Amount:int) : message = "Zebrana bateria: {Amount}"
BatteriesCollectedMessage<localizes>(Amount:int) : message = "Zebrane baterie: {Amount}"
# Komunikaty dla zebrania ukrytej baterii i komunikat o ukończeniu
AllBatteriesCollectedMessage<localizes> : message = "Udało ci się zebrać wszystkie baterie!"
SecretBatteryCollectedMessage<localizes> : message = "Brawo! Ukryta bateria daje ci dodatkowy czas!"
Powyższy skrypt pokazuje, jak zdefiniować funkcję, która zwraca sparametryzowany komunikat w zależności od liczby zebranych baterii. Definiuje też komunikaty wyświetlane, gdy gracz zbierze wszystkie baterie wraz z ukrytą baterią.
# Wykonywane, gdy ten skrypt urządzenia jest uruchamiany w trakcie gry
OnBegin<override>()<suspends>:void=
# Możesz wysłać do dziennika komunikat, aby określić, co skrypt ma zrobić
Logger.Print("Uruchomiono skrypt wyścigu parkour!")
# Subskrybowanie AgentSpawnedEvent.
# Gdy gracz się spawnuje, wywoływana jest funkcja "HandleAgentSpawned".
PlayerSpawnDevice.SpawnedEvent.Subscribe(HandleAgentSpawned)
# To samo dotyczy licznika czasu. Subskrybujemy go, gdy odliczy do zera
TimerDevice.FailureEvent.Subscribe(HandleTimerExpired)
# Przechodzimy przez tablicę batteryItemSpawners, dla każdego generatora przedmiotów subskrybujemy ItemPickupEvent.
# Robimy to dla każdego generatora przedmiotów, nie zapisujemy uchwytu, tak jak robiliśmy dla AgentSpawnedSubscription i TimerExpiredSubscription powyżej
# Nie musimy zapisywać uchwytu, ale bez tego nie możemy anulować subskrypcji, dlatego będzie się uruchamiała za każdym razem, gdy przedmiot zostanie podniesiony.
for (BatterySpawner : BatteryItemSpawners):
BatterySpawner.ItemPickedUpEvent.Subscribe(HandleBatteryPickedUp)
<# Alternatywny sposób wykonania pętli for powyżej, który używa liczby całkowitej do przechodzenia przez tablicę
for (i:int := 0..BatteryItemSpawners.Length - 1):
if (Battery := BatteryItemSpawners[i]):
Battery.ItemPickedUpEvent.Subscribe(HandlebatteryPickedUp) #>
SecretBatteryItemSpawner.ItemPickedUpEvent.Subscribe(HandleSecretBatteryPickedUp)
Funkcja OnBegin definiuje, co się dzieje podczas rozpoczęcia gry, a pętla for obsługuje zdarzenie podniesionych baterii.
# Funkcja wywoływana, gdy agent spawnuje się z Panelu startowego gracza
HandleAgentSpawned(Agent:agent):void=
Logger.Print("Agent się zespawnował!")
# Resetuj urządzenie licznika czasu, aby mieć pewność, że gracze dostają pełny czas
TimerDevice.Reset(Agent)
TimerDevice.Start(Agent)
W powyższym kodzie licznik czasu jest resetowany i uruchamiany od nowa, gdy gracz się spawnuje.
# Funkcja wywoływana w momencie, gdy gracz podniesie baterię z któregoś generatora przedmiotów
HandleBatteryPickedUp(Agent:agent):void=
# Zwiększamy liczbę zebranych baterii
set BatteriesCollected = BatteriesCollected + 1
# W ten sposób możesz wysłać liczbę baterii do dziennika. Przydaje się do debugowania
Logger.Print("Liczba podniesionych baterii: {BatteriesCollected}")
# Sprawdź, czy gracz zebrał wystarczająco dużo baterii, aby zakończyć grę
if:
BatteriesCollected >= BatteryItemSpawners.Length
then:
# Sprawdź, czy gracz zebrał 4 baterie (lub więcej). Jeśli tak, gracz wygrał, wywołaj funkcję EndGame
spawn { EndGame(Agent) }
else:
# Ten kod wykonuje się, gdy liczba baterii jest mniejsza niż 4. Pokaż komunikat w interfejsie, aby ponaglić gracza
# Komunikat w interfejsie zawiera liczbę pojedynczą "bateria", jeśli gracz zebrał tylko 1 baterię. Gdy zebranych jest więcej niż 1 bateria, słowo zmienia się na "baterie"
if:
BatteriesCollected = 1
then:
HUDMessageBattery.SetText(BatteryCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
else:
HUDMessageBattery.SetText(BatteriesCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
# Dalej mamy kolejny generator przedmiotów w tablicy, którą stworzyliśmy
# Wykonujemy to, "indeksując" wewnątrz tablicy. Dzieje się to w instrukcji "if", aby zapewnić prawidłowe odwołanie do NextBatterySpawner
if:
NextBatterySpawner := BatteryItemSpawners[BatteriesCollected]
then:
# Kiedy mamy kolejny generator przedmiotów, wywołujemy SpawnItem, który aktywuje kolejną baterię do zebrania
NextBatterySpawner.SpawnItem()
Powyżej znajduje się kod obsługujący podnoszenie baterii. Gdy zostaną podniesione wszystkie baterie, wywoływana jest metoda EndGame. W przeciwnym razie graczom wyświetlają się komunikaty w interfejsie i jest spawnowana kolejna bateria.
HandleSecretBatteryPickedUp(Agent:agent):void=
Logger.Print("Podniesiono ukrytą baterię")
# Pobierz pozostały czas, aby można było go wydłużyć
var TimeRemaining:float = TimerDevice.GetActiveDuration( Agent )
var TimeToAdd:float = (TimeRemaining + SecretBatteryTimeReward)
# Dodaj dodatkowy czas do urządzenia licznika czasu, ale nie przekraczaj pierwotnego czasu przy rozpoczęciu gry
TimerDevice.SetActiveDuration(Min(TimeToAdd, TimerDevice.GetMaxDuration()), Agent )
HUDMessageBattery.SetText(SecretBatteryCollectedMessage)
HUDMessageBattery.Show(Agent)
Powyższy kod wydłuża czas licznika po podniesieniu ukrytej baterii. Jest ustawiony tak, aby nie przekroczyć początkowego ustawienia licznika czasu na 30 sekund. Kod wyświetla też komunikat na ekranie.
# Funkcja wywoływana, gdy licznik czasu odliczy do zera
HandleTimerExpired(MaybeAgent:?agent):void=
Logger.Print("Odliczanie zakończone")
if (Agent := MaybeAgent?):
Agent
# Zlikwiduj gracza
if:
FortCharacter:fort_character = Agent.GetFortCharacter[]
then:
FortCharacter.Damage(500.0)
Powyższy kod likwiduje gracza po upływie czasu. Gracz jest wówczas respawnowany, a licznik czasu resetuje się w metodzie HandleAgentSpawned.
# Funkcja asynchroniczna, która obsługuje koniec gry
EndGame(Agent:agent)<suspends>:void=
HUDMessageBattery.SetText(AllBatteriesCollectedMessage)
HUDMessageBattery.Show(Agent)
# Odczekaj trzy sekundy przed zakończeniem gry
Sleep(3.0)
EndGameVictoryDevice.Activate(Agent)
# Wykonywane, gdy ten skrypt urządzenia zostaje zatrzymany lub w momencie końca gry
OnEnd<override>():void=
Logger.Print("Zatrzymano urządzenie Verse!")
Powyższy kod kończy grę. Użycie Sleep(3.0) to przykład metody asynchronicznej.
Konfiguracja urządzenia Verse

Skompiluj swój skrypt Verse i wyszukaj urządzenie w szufladzie zawartości. Przeciągnij urządzenie Verse do takiego obszaru na mapie, który nie jest widoczny dla graczy, aby dostosować ustawienia.

Na panelu Szczegóły urządzenia skonfiguruj ustawienia tak, aby pasowały do każdego urządzenia stanowiącego odwołanie, jak na powyższym zdjęciu.
Aby skonfigurować to urządzenie, skonfiguruj Opcje użytkownika w następujący sposób:
Opcja | Wartość | Wyjaśnienie |
---|---|---|
PlayerSpawnDevice | Panel startowy gracza | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
EndGameVictoryDevice | Urządzenie zwycięstwa na koniec gry | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
TimerDevice | Licznik czasu | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
HUDMessageBattery | Urządzenie komunikatu w interfejsie o baterii | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
PlayerSpawnDevice | Panel startowy gracza | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
BatteryItemSpawners - 0 | Generator baterii 1 | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
BatteryItemSpawners - 1 | Generator baterii 2 | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
BatteryItemSpawners - 2 | Generator baterii 3 | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
BatteryItemSpawners - 3 | Generator baterii 4 | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
SecretBatteryItemSpawner | Generator ukrytej baterii | Wybierz tę opcję z menu rozwijanego, aby odwoływać się do urządzeń. |
SecretBatteryTimeReward | 10.0 | Dodatkowy czas przyznawany za zebranie ukrytej baterii. |
Wybierz Uruchom sesję, aby przetestować ukończony poziom.