Die Verse Detonation-Vorlage zeigt dir, wie du ein Spiel erstellst, in dem zwei Teams darum kämpfen, Bombenstandorte scharf zu machen und zu entschärfen.
In diesem Tutorial werden das Verse-Gerät und grundlegende Geräte wie das Kartenanzeigegerät verwendet, um Spielmechaniken auszuführen, z. B. das Anzeigen von Leuchtfeuern abhängig von Bedingungen.
Diese Vorlage demonstriert Verse-Konzepte wie:
-
Aufzählungen
-
Parallelität
-
Race-Ausdrücke
-
Warten
-
Ü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.
-
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 IslandSettings-Gerät im Outliner und suche Benutzeroptionen – Spielregeln.
-
Ändere die Benutzeroptionen wie unten gezeigt.
Option | Wert | Beschreibung |
---|---|---|
Teams | Team-Index 2 | Die Spieler werden in Zweierteams aufgeteilt. |
Gesamtrunden | 5 | Es gibt fünf Runden, bevor das Spiel endet. |
Erlaube das Zuschauen anderer Teams | False | Spieler können anderen Teams nicht zuschauen. |
Unendliche Ressourcen | False | Die Spieler haben während des Spiels nicht unendlich Baumaterialien. |
Gebäude können die Umwelt zerstören | False | Das Platzieren von von Spielern gebauten Strukturen kann keine Teile der Umgebung zerstören, mit der sie sich überschneiden. |
Umweltschaden | Aus | Spieler können die Umgebung während des Spiels nicht beschädigen. |
Zerstörung der Spitzhacke | Keine | Spitzhacken verursachen keine Schäden an der Umwelt oder an Gebäuden. |
Manuelles Respawnen zulassen | False | Spieler können die Menüoption Respawn während des Spiels nicht verwenden. |
Teamergebnis verwenden | True | Jedes Team im Spiel erhält Statistiken durch die Summe seiner Spieler. |
Einrichten der Geräte
In diesem Tutorial werden folgende Geräte verwendet.
-
8 x Sprengstoff
-
2 x Zeitziele
-
1 x Spielbeender
-
1 x Verse
Sprengstoff-Gerät

Verwende das Sprengstoff-Gerät, um die Explosion für gezündete Timer auszulösen. Kopiere und platziere auf gegenüberliegenden Seiten der Karte eine Gruppe von vier Sprengkörpern.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
Option | Wert | Beschreibung |
---|---|---|
Kann beschädigt werden | False | Dieses Gerät nimmt keinen Schaden von Spielern. |
Zeitziele

Das Zeitziel-Gerät dient als Zünder für jeden Standort. Platziere ein Zeitziel-Gerät an beiden Gruppen von Sprengstoff-Geräten.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
Option | Wert | Beschreibung |
---|---|---|
Zeit | 30 | Bestimmt die Länge des Timers für das Ziel. |
Startpunktzahl | 2 | Legt die Punktzahl fest, die für das erfolgreiche Starten eines nicht gestarteten Timers vergeben wird. |
Endpunktzahl | 5 | Legt die Punktzahl fest, die nach dem erfolgreichen Stoppen eines aktiven Timers vergeben wird. |
Vollständige Punktzahl | 3 | Legt die Punktzahl fest, die vergeben wird, wenn der Timer abgelaufen ist. |
Textstil der Timer-Beschriftung | Fett Orange | Legt den Stil für die Countdown-Anzeige und den benutzerdefinierten Text fest. |
Teamfilter starten | Team-Index 1 | Legt fest, welches Team einen nicht gestarteten Timer starten kann. |
Interaktionstext starten | Bombe scharf machen | Legt den benutzerdefinierten Text fest, der als Aufforderung für einen Spieler angezeigt wird, der einen nicht gestarteten Timer starten kann. |
Interaktionszeit starten | 5 | Bestimmt die Dauer der Interaktion, die erforderlich ist, um einen nicht gestarteten Timer zu starten. |
Teamfilter stoppen | Team-Index 2 | Legt fest, welches Team einen aktiven Timer stoppen kann. |
Interaktionstext stoppen | Bombe entschärfen | Legt den benutzerdefinierten Text fest, der als Aufforderung für einen Spieler angezeigt wird, der einen aktiven Timer stoppen kann. |
Interaktionszeit stoppen | 5,0 | Bestimmt die Dauer der Interaktion, die erforderlich ist, um einen aktiven Timer zu stoppen. |
Timer Schallabstand | Ganze Karte | Legt fest, ob der Timer-Sound irgendwo auf der Karte lokalisiert oder hörbar ist. |
Kartenindikatorgerät

Verwende das Kartenindikator-Gerät, um benutzerdefinierte Markierungen auf der Minikarte zu erstellen. Platziere für jede Sprengstoffstelle zwei Kartenanzeigegeräte darüber, eins für jedes Team.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
Option | Wert | Beschreibung |
---|---|---|
Symbolfarbe | Farbauswahl | Legt die Farbe des angezeigten Symbols fest. Wähle eine Farbe, die jedes Team repräsentiert. |
Text | Sprengstoff A - Sprengstoff B | Benenne ein Paar von Kartenanzeigegeräten Bombe A und das andere Bombe B. |
Spielbeender-Gerät

Verwende das Spielbeender-Gerät, um die Runde zu beenden, nachdem die Bombe erfolgreich entschärft wurde oder wenn 30 Sekunden vergehen und sie per Verse-Script explodiert.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
Option | Wert | Beschreibung |
---|---|---|
Gewinnerteam | Aktivierungsteam | Das Team, das das Gerät aktiviert, gewinnt das Spiel. |
Was soll enden | Runde beenden | Dieses Gerät beendet die Spielrunde. |
Spieler-Spawnflächen-Gerät

Gruppiere die Spieler-Spawnflächen-Geräte der Teams auf gegenüberliegenden Seiten deiner Karte. Jedes Team hat seine eigenen Spawner, wobei Team 1 die Bombe aktiviert und Team 2 die Bombe entschärft. Die Teams tauschen jede Runde.
Konfiguriere die Benutzeroptionen wie folgt, um dieses Gerät einzurichten:
Option | Wert | Beschreibung |
---|---|---|
Spielerteam | Team-Index 1 - 2 | Ein Satz Spawnflächen wird auf Team-Index 1 gesetzt, während der andere auf Team-Index 2 gesetzt 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.
# Enum um den Zustand der Bomben zu bestimmen
bomb_state<public>:= enum {AllUnarmed, BombAArmed, BombBArmed}
Der obige Code definiert eine Aufzählung, um den Zustand der Bomben zu verfolgen.
search_and_destroy := class(creative_device):
Logger:log = log{Channel:=log_search_and_destroy}
@editable
TimedObjectiveA: timed_objective_device = timed_objective_device{}
@editable
TimedObjectiveB: timed_objective_device = timed_objective_device{}
@editable
ExplosiveBarrelsA: []explosive_device = array{}
@editable
ExplosiveBarrelsB: []explosive_device = array{}
@editable
EndGameDevice: end_game_device = end_game_device{}
@editable
BombAMapIndicators: []map_indicator_device = array{}
@editable
BombBMapIndicators: []map_indicator_device = array{}
@editable
BombABeaconArm: beacon_device = beacon_device{}
@editable
BombABeaconDisarm: beacon_device = beacon_device{}
@editable
BombBBeaconArm: beacon_device = beacon_device{}
@editable
BombBBeaconDisarm: beacon_device = beacon_device{}
var BombState:bomb_state = bomb_state.AllUnarmed
Du kannst @editable verwenden, um auf die Geräte zu verweisen.
# Wird ausgeführt, wenn das Gerät in einem laufenden Spiel gestartet wird
OnBegin<override>()<suspends>:void=
# Der Race-Ausdruck wird verwendet, um einen Block von zwei oder mehr asynchronen Ausdrücken gleichzeitig (simultan) auszuführen. Wenn der schnellste Ausdruck abgeschlossen ist, „gewinnt er das Rennen“.
# https://dev.epicgames.com/documentation/de-de/uefn/race-in-verse
race:
block:
# Warte, bis Bombe A scharf ist
ArmingPlayer:= TimedObjectiveA.StartedEvent.Await()
Print("Bomb A Armed",?Duration:=5.0)
# Wusste früher, welche Leuchtfeuer aktiviert werden müssen und welche Fässer explodieren müssen
set BombState = bomb_state.BombAArmed
# Deaktiviere das andere zeitgesteuerte Zielgerät
TimedObjectiveB.Disable(ArmingPlayer)
# Deaktiviere Kartenindikatoren für Bombe B
for (MapIndicator : BombBMapIndicators):
MapIndicator.Disable()
Der erste Abschnitt des Codes zeigt Parallelität unter Verwendung von Race-Bedingungen, um festzustellen, ob Bombe A oder Bombe B zuerst scharf gemacht wurde.
block:
# Warte, bis Bombe B scharf ist
ArmingPlayer:= TimedObjectiveB.StartedEvent.Await()
Print("Bomb B Armed",?Duration:=5.0)
# Wusste früher, welche Leuchtfeuer aktiviert werden müssen und welche Fässer explodieren müssen
set BombState = bomb_state.BombBArmed
# Deaktiviere das andere zeitgesteuerte Zielgerät
TimedObjectiveA.Disable(ArmingPlayer)
# Deaktiviere Kartenindikatoren für Bombe A
for (MapIndicator : BombAMapIndicators):
MapIndicator.Disable()
# Aktiviere die richtigen Leuchtfeuer-Geräte, da jetzt eine Bombe scharf ist
UpdateBeacons()
# Warte, bis das TimedObjective abgeschlossen ist oder gestoppt wird
race:
block:
BombDetonated(TimedObjectiveA.CompletedEvent.Await())
block:
BombDetonated(TimedObjectiveB.CompletedEvent.Await())
block:
DisarmingPlayer:= TimedObjectiveA.StoppedEvent.Await()
Print("Bomb Disarmed", ?Duration:=5.0)
EndGameDevice.Activate(DisarmingPlayer)
block:
DisarmingPlayer:= TimedObjectiveB.StoppedEvent.Await()
Print("Bomb Disarmed", ?Duration:=5.0)
EndGameDevice.Activate(DisarmingPlayer)
Der obige Code zeigt Parallelität, bei der das Script darauf wartet, dass das Zeitziel entweder abgeschlossen oder gestoppt wird.
# Deaktiviere die unbewaffneten Leuchtfeuer und aktiviere das Leuchtfeuer über der scharfen Bombe
UpdateBeacons():void=
BombABeaconArm.Disable()
BombBBeaconArm.Disable()
if:
BombState = bomb_state.BombAArmed
then:
BombABeaconDisarm.Enable()
else:
BombBBeaconDisarm.Enable()
Der obige Code aktualisiert den Zustand der Leuchtfeuer abhängig davon, welche Bombe scharf ist.
BombDetonated(Agent:agent):void=
Print("Bombe explodiert", ?Duration:=5.0)
# Bestimme, welche Fässer explodieren sollen
if:
BombState = bomb_state.BombAArmed
then:
ExplodeBarrels(ExplosiveBarrelsA, Agent)
else:
ExplodeBarrels(ExplosiveBarrelsB, Agent)
EndGameDevice.Activate(Agent)
Die obige Methode wird aufgerufen, wenn das Zeitzielgerät abgeschlossen ist. Es bestimmt, welche Fässer explodieren und das Spiel beenden sollen.
ExplodeBarrels(Barrels:[]explosive_device, Agent:agent):void=
for (Barrel : Barrels):
Barrel.Explode(Agent)
Die obige for-Schleife dient dazu, jedes Fass an der richtigen Bombenstelle explodieren zu lassen.
Verse-Gerät

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.
Verwende dieses Gerät, um die direkte Ereignisbindung mit den erforderlichen Geräten zu verknüpfen, damit sie vom Verse-Skript referenziert werden können.

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 |
---|---|---|
TimeObjectiveA | Zeitziel BombSiteA | Verbindet das Zeitziel-Gerät mit dem Sprengstoffstandort. |
TimeObjectiveB | Zeitziel BombSiteB | Verbindet das Zeitziel-Gerät mit dem Sprengstoffstandort. |
ExplosiveBarrelsA | 0 - BarrelBombSiteA_1 | Verbindet das Sprengstoff-Gerät. |
ExplosiveBarrelsA | 1 - BarrelBombSiteA_2 | Verbindet das Sprengstoff-Gerät. |
ExplosiveBarrelsA | 2 - BarrelBombSiteA_3 | Verbindet das Sprengstoff-Gerät. |
ExplosiveBarrelsA | 3 - BarrelBombSiteA_4 | Verbindet das Sprengstoff-Gerät. |
ExplosiveBarrelsB | 0 - BarrelBombSiteB_1 | Verbindet das Sprengstoff-Gerät. |
ExplosiveBarrelsB | 1 - BarrelBombSiteB_2 | Verbindet das Sprengstoff-Gerät. |
ExplosiveBarrelsB | 2 - BarrelBombSiteB_3 | Verbindet das Sprengstoff-Gerät. |
ExplosiveBarrelsB | 3 - BarrelBombSiteB_4 | Verbindet das Sprengstoff-Gerät. |
EndGameDevice | End Game Device2 | Verbindet das Spielbeender-Gerät. |
BombAMapIndicators | 0 - Map_Team1_BombsiteA | Verbindet das Kartenanzeigegerät mit dem Sprengstoffstandort. |
BombAMapIndicators | 1 - Map_Team2_BombsiteA | Verbindet das Kartenanzeigegerät mit dem Sprengstoffstandort. |
BombBMapIndicators | 0 - Map_Team1_BombsiteB | Verbindet das Kartenanzeigegerät mit dem Sprengstoffstandort. |
BombBMapIndicators | 1 - Map_Team2_BombsiteB | Verbindet das Kartenanzeigegerät mit dem Sprengstoffstandort. |
BombABeaconArm | BeaconArmBombSiteA | Macht den Sprengstoff für Standort A scharf. |
BombABeaconDisarm | BeaconDisarmBombSiteA | Entschärft den Sprengstoffstandort A. |
BombBBeaconArm | BeaconArmBombSiteB | Macht den Sprengstoff für Standort B scharf. |
BombBBeaconDisarm | BeaconDisarmBombSiteB | Entschärft den Sprengstoff für Standort B. |
Wähle Sitzung starten, um dein abgeschlossenes Level zu testen.