Die Verse-Parkour-Vorlage zeigt dir, wie du einen Spielmodus erstellst, in dem Spieler strategisch durch Hindernisse und Plattformen manövrieren können, um Batterien zu sammeln.
In diesem Spielmodus sammeln die Spieler vier Batterien, um das Level abzuschließen. Die Zeit verlängert sich, wenn sie die geheime Batterie finden. Wenn die Zeit abgelaufen ist, kehrt der Spieler zum Anfang zurück.
Diese Vorlage demonstriert einige grundlegende Sprachfunktionen wie:
-
For-Schleifen
-
Abonnements
-
Arrays
-
Geräte-API
Komplexe Konzepte wie Parallelität werden in dieser Vorlage nicht verwendet.
Übersicht
Im Folgenden findest du eine Übersicht über die Schritte, die du ausführen musst, um diese Insel neu zu erstellen, in der idealen Reihenfolge:
-
Erstelle ein neues Projekt und ändere die Inseleinstellungen, um das Spiel einzurichten.
-
Baue die Arena.
-
Richte Geräte ein.
-
Füge das Verse-Script hinzu.
Erstellen eines neuen Projekts und Einrichten des Spiels
-
Öffne UEFN und erstelle ein neues leeres Projekt.
-
Wähle das Inseleinstellungen-Gerät im Outliner und suche Benutzeroptionen – Spielregeln.
-
Ändere die Benutzeroptionen wie unten gezeigt.
Option Wert Beschreibung Spielgewinnbedingung Die meisten Punkte gewinnen Der Spieler mit der höchsten Punktzahl gewinnt das Spiel. Zerstörungskraft von Spitzhacke Keine Die Spitzhacke fügt der Umgebung keine Schäden zu. Starten mit Spitzhacke Falsch Die Spieler beginnen das Spiel nicht mit einer Spitzhacke. **Automatisches Aufsammeln von Gegenstände Ja Die Spieler nehmen automatisch Gegenstände auf, mit denen sie in Kontakt kommen. Hochziehen, Sprinten, Rutschen, Schulterstoß zulassen Wahr Spieler in können die Umgebung für einen Hindernislauf nutzen. Runde Gewinnbedingung Punkte Die Spieler mit der höchsten Punktzahl gewinnen die Runde. Erste Spalte der Anzeigetafel Punkte Die Anzeigetafel zeigt die Punktzahl in der ersten Spalte an.
Bau der Arena
Diese Karte verwendet die Cyber City Prop-Galerie, die unter Fortnite > Galerien > Props zu finden ist.
Erstelle diese Karte mit Plattformen und Hindernissen, über die Spieler beim Parkour springen können.
Einrichten der Geräte
In diesem Tutorial werden folgende Geräte verwendet.
-
5 x Gegenstandsgeber
-
1 x Spielbeender
-
1 x Schadensvolumen
-
1 x Timer
-
1 x HUD-Nachricht
-
1 x Verse-Gerät
Spieler-Spawnflächen-Gerät
Verwende ein Spieler-Spawnflächen-Gerät, um Spieler auf der Karte zu spawnen. Platziere am Anfang deiner Karte für jeden Spieler eine Spawnfläche, die du unter Fortnite > Geräte > Spieler-Spawn-Pad findest.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
| Option | Wert | Beschreibung |
|---|---|---|
| Sichtbar im Spiel | Falsch | Dieses Gerät wird im Spiel nicht sichtbar sein. |
Gegenstandsgeber-Gerät
In UEFN wird durch ziehen eines Verbrauchsgegenstand aus dem Inhaltsfach dieser automatisch in einem Gegenstands-Spawnpunkt-Gerät platziert. Ziehe einen Batterie-Gegenstand auf die Karte, den du unter Fortnite > Gegenstände > Batterie finden kannst.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
| Option | Wert | Beschreibung |
|---|---|---|
| Zeit vor dem Spawn | 0,1 | Dies bestimmt die Zeitspanne, bevor der Element, Gegenstand spawnt. |
| Respawn Gegenstand nach Timer | Falsch | Die Batterie wird nach dem Aufheben nicht respawnen. |
| Basis während des Spiels sichtbar | Falsch | Das Gerät wird im Spiel nicht sichtbar sein. |
| Bonusmunition für Waffen | Falsch | Waffen geben keine Bonusmunition. |
| Aufnahme beim Darüberlaufen | Wahr | Spieler werden diesen Gegenstand automatisch aufheben. |
| Gegenstandsskalierung | 2,0 | Dies bestimmt die Größe der Batterie. |
Kopiere dieses Gerät noch viermal, füge sie ein und platziere sie auf deiner Karte.
Spielbeender-Gerät
Platziere ein Spielbeender-Gerät, um das Spiel zu beenden, wenn es aktiviert wird.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
| Option | Wert | Beschreibung |
|---|---|---|
| Benutzerdefinierter Siegestext | Text eingeben | Gib den Text ein, der dem Gewinner angezeigt werden soll. |
Schadensvolumengerät
Das Schadensvolumen-Gerät ist eine Grenze, die Spielern innerhalb ihrer Zone Schaden zufügen kann. Platziere dieses Gerät unter deiner Karte und passe Zonenbreite, Tiefe und Höhe an, um den Boden deiner Arena abzudecken um gefallene Spieler sofort zu eliminieren.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
| Option | Wert | Beschreibung |
|---|---|---|
| Schaden | 500 | Dieses Gerät verursacht genug Schaden, um fallende Spieler sofort zu eliminieren. |
Timer-Gerät
Platziere ein Timer-Gerät in der Nähe des Spielbeender-Geräts. Dieses Gerät zählt die Zeit herunter, bis der Spieler eliminiert wird und von vorne beginnen muss.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
| Option | Wert | Beschreibung |
|---|---|---|
| Dauer | 30 | Der Timer dauert 30 Sekunden. |
| Bei Spielstart starten | Wahr | Der Timer beginnt, wenn das Spiel beginnt. |
| Gilt für | Spieler | Wenn der Timer startet, gilt er für einen bestimmten Spieler. |
| Erfolg bei Timer-Ende | Falsch | Wenn der Timer abgelaufen ist, zählt dies nicht als Erfolg. |
| Sichtbar während des Spiels | Versteckt | Das Gerät wird im Spiel ausgeblendet. |
| Timer Lauftext | Text eingeben | Gib den Text ein, der für den Timer angezeigt werden soll. |
HUD-Nachricht
Verwende ein HUD-Nachrichten-Gerät, um den Spielern motivierende Nachrichten anzuzeigen.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
| Option | Wert | Beschreibung |
|---|---|---|
| Anzeigezeit | 2,0 | Die Meldung wird zwei Sekunden lang angezeigt, bevor sie verschwindet. |
| Bei Rundenstart anzeigen | Falsch | Diese Meldung wird nicht angezeigt, wenn die Runde beginnt, sondern wenn eine Batterie aufgenommen wird. |
Hinzufügen der Verse-Scripte
Füge folgende Verse-Scripte hinzu, beginnend mit den Verweisen auf Geräte mit der @editable-Funktion.
Du kannst den Code in der Reihenfolge kopieren, in der er geschrieben wurde. Kommentare werden innerhalb des Scripts zur Verdeutlichung hinzugefügt.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
log_parkour := class(log_channel){}
# Ein mit Verse erstelltes Kreativmodus-Gerät, das in einem Level platziert werden kann
# Dieses Script-Beispiel ist eine Variante von Parkour, bei der das Ziel darin besteht, 4 Batterien zu sammeln, bevor der Timer abläuft.
#
# Erste Schritte:
# https://dev.epicgames.com/documentation/de-de/uefn/learn-programming-with-verse-in-unreal-editor-for-fortnite
parkour_race_script := class(creative_device):
Logger : log = log{Channel:=log_parkour}
# Gerätereferenz zum Spieler-Spawner
@editable
PlayerSpawnDevice : player_spawner_device = player_spawner_device{}
# Spielbeender-Gerät für einen Sieg
@editable
EndGameVictoryDevice : end_game_device = end_game_device{}
# Timer für diesen Spiel-Modus
@editable
TimerDevice : timer_device = timer_device{}
# HUD-Nachrichten-Feedback für den Spieler, wenn er eine Batterie erhält
@editable
HUDMessageBattery : hud_message_device = hud_message_device{}
# Ein Array unserer Gegenstands-Spawnpunkte
@editable
BatteryItemSpawners : []item_spawner_device = array{}
@editable
SecretBatteryItemSpawner : item_spawner_device = item_spawner_device{}
# Einstellbare Zeitspanne, die hinzugefügt werden kann, wenn der Spieler die geheime Batterie aufhebt
@editable
SecretBatteryTimeReward : float = 10.0
# Deklaration für eine ganze Zahl, die die Anzahl der Batterien darstellt, die wir bisher gesammelt haben
var BatteriesCollected : int = 0
Das obige Script zeigt, wie @editable verwendet wird, um Kreativmodus-Geräte, Arrays und Floats in UEFN anzuzeigen. Damit dein Script sie später aufrufen kann, müssen die Geräte zunächst in Verse definiert werden.
# Meldung, die angezeigt wird, wenn eine Batterie aufgesammelt wird
BatteryCollectedMessage<localizes>(Amount:int) : message = "Du hast {Amount} Batterie gesammelt"
BatteriesCollectedMessage<localizes>(Amount:int) : message = "Du hast {Amount} Batterien gesammelt"
# Nachrichten zum Sammeln der geheimen Batterie und Abschlussnachricht
AllBatteriesCollectedMessage<localizes> : message = "Du hast alle Batterien eingesammelt!"
SecretBatteryCollectedMessage<localizes> : message = "Du hast die geheime Batterie eingesammelt; zusätzliche Zeit hinzugefügt!"
Das obige Script zeigt, wie man eine Funktion definiert, die eine parametrisierte Nachricht basierend auf der Menge der gesammelten Batterien zurückgibt. Es definiert auch die Meldungen, die angezeigt werden sollen, wenn alle Batterien und die geheime Batterie gesammelt wurden.
# Läuft, wenn dieses „device_script“ in einem laufenden Spiel gestartet wird
OnBegin<override>()<suspends>:void=
# Du kannst eine Ausgabe wie die folgende in das Log ausgeben, um festzustellen, was dein Script tut.
Logger.Print("Parkour-Race-Script gestartet!")
# Abonnieren des AgentSpawnedEvent
# Beim Spawnen des Spielers wird die Funktion "HandleAgentSpawned" aufgerufen.
PlayerSpawnDevice.SpawnedEvent.Subscribe(HandleAgentSpawned)
# Gleiches gilt für den Timer. Wir abonnieren, wenn er abläuft
TimerDevice.FailureEvent.Subscribe(HandleTimerExpired)
# Wir gehen durch unser Array von batteryItemSpawners und für jeden Gegenstands-Spawnpunkt abonnieren wir das ItemPickupEvent.
# Wir tun dies für jeden Gegenstands-Spawnpunkt und speichern das Handle nicht wie bei AgentSpawnedSubscription und TimerExpiredSubscription oben
# Du musst das Handle nicht speichern, aber ohne das Speichern kannst du das Abonnement nicht aufheben, sodass es jedes Mal ausgelöst wird, wenn ein Gegenstand aufgehoben wird.
für (BatterySpawner : BatteryItemSpawners):
BatterySpawner.ItemPickedUpEvent.Subscribe(HandleBatteryPickedUp)
<# Eine alternative Möglichkeit, die obige for-Schleife auszuführen, die eine ganze Zahl verwendet, um das Array zu durchlaufen.
for (i:int := 0..BatteryItemSpawners.Length - 1):
if (Battery := BatteryItemSpawners[i]):
Battery.ItemPickedUpEvent.Subscribe(HandlebatteryPickedUp) #>
SecretBatteryItemSpawner.ItemPickedUpEvent.Subscribe(HandleSecretBatteryPickedUp)
Die OnBegin-Funktion definiert, was passiert, wenn das Spiel startet, während die for-Schleife auf das Event der Aufnahme von Batterien eingestellt ist.
# Eine Funktion, die aufgerufen wird, wenn der Agent an der Spieler-Spawnfläche spawnt.
HandleAgentSpawned(Agent:agent):void=
Logger.Print("Agent gespawnt!")
# Setze das Timer-Gerät zurück, um sicherzustellen, dass respawnende Spieler die volle Zeit erhalten.
TimerDevice.Reset(Agent)
TimerDevice.Start(Agent)
Oben ist der Code für das Spawnen des Spielers, der den Timer zurücksetzt und von vorne startet.
# Funktion, die aufgerufen wird, wenn ein Batterie-Gegenstand vom Gegenstands-Spawnpunkt aufgenommen wird
HandleBatteryPickedUp(Agent:agent):void=
# Erhöhe die Anzahl der gesammelten Batterien.
set BatteriesCollected = BatteriesCollected + 1
# So kannst du die Anzahl der Batterien im Protokoll ausgeben. Nützlich zum Debuggen.
Logger.Print("Number of batteries picked up: {BatteriesCollected}")
# Überprüfe, ob bis zum Ende des Spiels genügend Batterien gesammelt wurden
if:
BatteriesCollected >= BatteryItemSpawners.Length
then:
# Überprüfe, ob wir 4 (oder mehr) Batterien gesammelt haben. Wenn ja, haben wir gewonnen. Rufe dann die EndGame-Funktion auf.
spawn { EndGame(Agent) }
else:
# Dieser Code wird ausgeführt, wenn die Anzahl der Batterien weniger als 4 beträgt. Zeige eine HUD-Nachricht, um den Spieler anzuspornen
# HUD-Nachricht ist „Batterie“, wenn nur 1 Batterie gesammelt wird. Wird zu „Batterien“, wenn mehr als 1 gesammelt wird
if:
BatteriesCollected = 1
then:
HUDMessageBattery.SetText(BatteryCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
else:
HUDMessageBattery.SetText(BatteriesCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
# Dann rufen wir den nächsten Gegenstands-Spawnpunkt in unserem Array ab, das wir eingerichtet haben.
# Wir tun dies, indem wir in das Array „indizieren“. Es befindet sich in der „if“-Anweisung, um sicherzustellen, dass NextBatterySpawner korrekt referenziert wird.
if:
NextBatterySpawner := BatteryItemSpawners[BatteriesCollected]
then:
# Wenn wir den nächsten Gegenstands-Spawnpunkt abgerufen haben, SpawnItem aufrufen, damit die nächste Batterie aktiviert wird
NextBatterySpawner.SpawnItem()
Oben ist der Code, der das Aufheben einer Batterie handhabt. Wenn alle Batterien aufgehoben wurden, wird die EndGame-Methode aufgerufen. Andernfalls werden HUD-Meldungen für Spieler angezeigt und die nächste Batterie wird gespawnt.
HandleSecretBatteryPickedUp(Agent:agent):void=
Logger.Print("Geheime Batterie aufgenommen")
# Verbleibende Zeit abrufen, damit wir zusätzliche Zeit hinzufügen können
var TimeRemaining:float = TimerDevice.GetActiveDuration( Agent )
var TimeToAdd:float = (TimeRemaining + SecretBatteryTimeReward)
# Füge zum Timer-Gerät zusätzliche Zeit hinzu, aber gehe nicht über die anfängliche Startzeit hinaus
TimerDevice.SetActiveDuration(Min(TimeToAdd, TimerDevice.GetMaxDuration()), Agent )
HUDMessageBattery.SetText(SecretBatteryCollectedMessage)
HUDMessageBattery.Show(Agent)
Oben ist der Code, der dem Timer-Gerät Zeit hinzufügt, wenn die geheime Batterie aufgenhoben wird. Er ist so eingestellt, dass die Startzeit des Timers von 30 Sekunden nicht überschritten wird. Dieser Code zeigt auch eine Meldung auf dem Bildschirm an.
# Funktion, die aufgerufen wird, wenn der Timer abläuft
HandleTimerExpired(MaybeAgent:?agent):void=
Logger.Print("Timer abgelaufen")
if (Agent := MaybeAgent?):
Agent
# Eliminiere den Spieler
if:
FortCharacter:fort_character = Agent.GetFortCharacter[]
then:
FortCharacter.Damage(500.0)
Oben ist der Code, der den Spieler eliminiert, wenn die Zeit abläuft. Der Spieler wird dann neu gestartet und der Timer wird in der HandleAgentSpawned-Methode zurückgesetzt.
# Asynchrone Funktion, die das Ende des Spiels behandelt
EndGame(Agent:agent)<suspends>:void=
HUDMessageBattery.SetText(AllBatteriesCollectedMessage)
HUDMessageBattery.Show(Agent)
# Warte drei Sekunden, bevor das Spiel beendet wird
Sleep(3.0)
EndGameVictoryDevice.Activate(Agent)
# Wird ausgeführt, wenn dieses device_script gestoppt wird oder das Spiel endet
OnEnd<override>():void=
Logger.Print("Verse-Gerät gestoppt!")
Oben ist der Code, der das Spiel beendet. Die Verwendung von Sleep(3.0) ist ein Beispiel für die Verwendung einer asynchronen Methode.
Einrichten des Verse-Geräts
Kompiliere dein Verse-Script und suche dann dein Gerät in der Inhalts-Schublade. Ziehe das Verse-Gerät auf einen unsichtbaren Bereich deiner Karte, um die Einstellungen anzupassen.
Konfiguriere im Details-Panel des Geräts die Einstellungen so, dass sie mit jedem referenzierten Gerät übereinstimmen, wie auf dem Foto oben abgebildet.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
| Option | Wert | Beschreibung |
|---|---|---|
| PlayerSpawnDevice | Spieler-Spawnfläche | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| EndGameVictoryDevice | Spielbeender-Sieg-Gerät | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| TimerDevice | Timer | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| HUDMessageBattery | HUD-Nachrichtengerät Batterie | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| PlayerSpawnDevice | Spieler-Spawnfläche | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| BatteryItemSpawners - 0 | Batterie-Spawner 1 | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| BatteryItemSpawners - 1 | Batterie-Spawner 2 | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| BatteryItemSpawners - 2 | Batterie Spawner 3 | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| BatteryItemSpawners - 3 | Batterie-Spawner 4 | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| SecretBatteryItemSpawner | Batterie-Spawner - geheim | Wähle diese Option aus dem Dropdown-Feld, um Geräte zu referenzieren. |
| SecretBatteryTimeReward | 10,0 | Die Zeitbelohnung für das Sammeln der geheimen Batterie. |
Wähle Sitzung starten, um dein abgeschlossenes Level zu testen.