Die Vorlage Speedway-Rennen mit Verse-Persistenz ist die Kreativmodus-Vorlage Entwerfen eines Speedway-Rennens, die in UEFN konvertiert wurde. Dem Projekt wurden folgende Funktionen hinzugefügt:
Eine dauerhafte lokale Rangliste in der Wartelobby, die Verse-Persistenz verwendet und nur in der ersten Runde angezeigt wird.
Ein System, das Spielern mithilfe von Verse-Persistenz die Autos an der Startlinie zuweist, abhängig von ihrer Zielreihenfolge in einer vorherigen Runde.
Eine Startaufstellung, die die Stats jedes Spielers mithilfe einer kinematografischen Sequenz und Verse anzeigt.
Und mehr!
Das Ziel der Kreativmodus-Vorlage Designing a Speedway Race war es, die Assets der Rennstrecke zu verwenden, um einen einzigartigen Modus mit einigen Komfortfunktionen zu bauen. Mit dieser UEFN-Vorlage wurde ein ganzheitlicher Ansatz verfolgt, um viele Funktionen in der Karte zu ersetzen und zu aktualisieren, damit die mächtigen Funktionen von UEFN genutzt werden können.
In den folgenden Abschnitten werden diese Aktualisierungen im Detail erläutert.
Aktualisieren der Tutorial-Zone
Die Rangliste findest du in der Tutorial-Zone. Jedes Mal, wenn du zu deiner ersten Runde auf der Karte geladen wirst, erhältst du 30 Sekunden Zeit, um dir die aktuelle Rangliste anzusehen und das Tutorial-Gebiet zu erkunden.
Dieses Gebiet ist so aufgebaut, dass es für Spieler, die ein bisschen Rennspaß suchen, visuell ansprechend ist und gleichzeitig viele Details darüber liefert, wie man eine solche Karte bauen kann. Die Tutorial-Zone wurde ausgehend von der Kreativmodus-Vorlage neu gestaltet, um sie klarer und offener zu machen, und es wurden Skylights hinzugefügt, um mehr natürliches Lumen-Licht hereinzubringen.
Wenn du die Vorlage in UEFN lädst, kannst du dich über die Einrichtung jeder Gerätegruppe und Verse-Skripte informieren, um zu erfahren, wie die Vorlage erstellt wurde, und sie in deinen eigenen Erlebnissen implementieren.
In der Tutorial-Zone befinden sich die meisten unserer Geräte, damit du sie durchstöbern und ihre Logik verstehen kannst. Diese umfassen die wichtigsten Retention-Geräte, Auszeichnungen und Analytik. Auszeichnungen-Geräte gewähren nur XP, wenn du eine Runde oder ein Rennen beendest.
Du kannst Analytik-Geräte einrichten, um verschiedene Datenpunkte zu verfolgen, damit du dein Projekt in zukünftigen Aktualisierungen verbessern kannst. Diese Vorlage verfolgt, wie oft jeder Checkpoint abgeschlossen wird und wie oft die Spieler während des Rennens Silbermünzen einsammeln. Beide geben Daten darüber an, wie leicht oder schwer ein bestimmter Checkpoint oder eine Münze zu erreichen ist. Auf der Basis dieser Daten kannst du in zukünftigen Releases die Position oder die Anzahl dieser Objekte anpassen, um das ganze Spiel nahtloser zu gestalten und ein besseres Rennerlebnis zu bieten.
Aufräumen des Outliners
Nachdem das Projekt in UEFN konvertiert wurde, war der Outliner mit einer langen Liste von unorganisierten Assets überfüllt.
Obwohl alles noch funktionierte, wurden an die Namen von Fahrzeugen, Barrieren und anderen Gegenständen Zahlen angehängt, was es schwierig machte, die Projektstruktur zu verstehen. Bei der Konvertierung wurden diese Zahlen automatisch hinzugefügt, um sicherzustellen, dass jedes Asset und jedes Gerät einen einzigartigen Namen hat.
Um dem Ganzen Herr zu werden, wurde dem Projekt ein Dateisystem hinzugefügt, um alle Objekte auf der Basis ihrer Position und Funktionalität zu organisieren. Dieses System ist zwar zeitaufwendig zu organisieren, ermöglicht aber ein wesentlich effizienteres Verschieben oder Löschen von Objektgruppen oder ganzen Gebieten als im Kreativmodus.
Dauerhafte lokale Rangliste
Da in der ursprünglichen Kreativmodus-Karte keine dauerhaften Daten vorhanden waren, konnten frühere Rennsieger und Spielerstatistiken nicht verfolgt werden. In der aktualisierten UEFN-Vorlagenkarte bedeutet die Verwendung von Verse und Verse Persistence, dass wir die Daten der Spieler über mehrere Spielsitzungen hinweg speichern können, um die Lebenszeit der Spielerstatistiken zu überwachen und lokale Ranglisten zu erstellen. Du kannst nur auf Daten von Spielern zugreifen, die sich in der aktuellen Spielsitzung befinden. Die Rangliste spiegelt also nur die Statistiken von Spielern wider, die gerade spielen.
Wir haben uns für „Podiumsplätze“ und „Rundenzeit“ als die wichtigsten dauerhaft zu speichernden Statistiken entschieden, die pro Spieler verfolgt werden sollen. Die Spieler erhalten nur dann einen Platz auf dem Podium, wenn sie unter den ersten 3 Spielern sind, während die beste Rundenzeit die schnellsten Rennfahrer verfolgt. Wir haben auch eine zusätzliche Statistik mit dem Namen „Punkte“ hinzugefügt. Die Spieler erhalten Punkte auf Basis ihrer Platzierung während des Rennens, so dass Spieler, die viele Rennen fahren, aber nicht unbedingt gut platziert sind, trotzdem eine große Anzahl von Punkten sammeln können. Mit diesen Statistiken haben wir einen Weg gefunden, die härtesten, schnellsten und engagiertesten Rennfahrer in einem zu würdigen.
Die konvertierte Vorlage verwendet eine Wartelobby mit lokalen Ranglisten, die die Lebenszeitstatistiken jedes Spielers anzeigen. Diese Statistiken sind so sortiert, dass die Spieler mit der besten Lebenszeitstatistik auf der Vorderseite erscheinen und die drei besten Spieler hervorgehoben werden, um ihr Können zu zeigen. Diese Statistiken werden auch auf dem HUD während der Startaufstellungsfilmsequenz angezeigt, damit die Spieler die Konkurrenz im Auge behalten und sich daran erinnern können, auf wen sie während des Rennens achten müssen.
Wenn du mehr darüber erfahren möchtest, wie du eine dauerhafte lokale Rangliste erstellst, sieh dir Erstelle deine eigene In-Game-Rangliste an.
Reihenfolge der Rennfahrer an der Startlinie
Die konvertierte Vorlage ersetzt die zufällige Startreihenfolge aus dem ursprünglichen Projekt durch eine Reihenfolge, die sich danach richtet, wie gut die Teilnehmer in der vorherigen Runde abgeschnitten haben. Das ermutigt die Spieler, das Rennen schnell zu beenden, auch wenn sie nicht auf dem ersten Platz liegen.
In der ersten Runde werden die Fahrer in einer zufälligen Reihenfolge platziert, aber nach der ersten Runde werden die Fahrer nach der Position angeordnet, die sie in der vorherigen Runde erreicht haben. Diese Informationen müssen zwischen den Runden gespeichert werden, bleiben aber nicht dauerhaft erhalten, wenn das Spiel endet. Du kannst sie verwenden, um die Startreihenfolge zu bestimmen, indem du die Spieler nach ihrer vorherigen Reihenfolge im Ziel sortierst. Um zu lernen, wie man Rundendaten speichert und sortiert, schau dir die folgenden Tutorials an:
# Orders and returns players by their finish order in the previous round.
# During the first round, players are given random starting placements.
GetPlayerStartOrder<public>(Players:[]player):[]player=
var OrderedPlayers:[]player = Players
if:
IsFirstRound[GetRound[]]
then:
# Randomize player order because it's first round.
set OrderedPlayers = Shuffle(OrderedPlayers)
Wenn du den Spielern Fahrzeuge zuweist und sie an der Startlinie einstellst, musst du sicherstellen, dass die Spieler auch tatsächlich aktiv sind und ein Rennen fahren werden. Du kannst eine Funktion namens GetAllValidPlayers() erstellen, die alle Spieler durchgeht und diejenigen zurückgibt, die noch aktiv sind (das Spiel noch nicht verlassen haben) und keine Zuschauer sind (tatsächlich Rennen fahren).
# Get all players that are able to race.
GetAllValidPlayers(Players:[]player):[]player=
# Valid players are ones that are active and not spectating.
for:
Player : Players
Player.IsActive[]
not Player.IsSpectator[]
do:
PlayerMit all dem verwendet das Projekt das Gerät starting_game_sequence, um in der ersten Runde die Ranglisten-Lobby einzurichten, und weist dann den Spielern Startpositionen und Fahrzeuge zu, bevor das Rennen beginnt.
# This file handles the logic for the pregame lobby and the cinematics that play at the beginning of a race.
# It controls the length of the starting lineup based on the number of players, and plays an intro for each
# player by displaying their stats.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/FortPlayerUtilities }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
Startlinienfilmsequenz mit Spieler-Statistiken
Die ursprüngliche Version der Kreativmodus-Vorlage „Entwerfen eines Speedway-Rennens“ verwendete das Puls-Trigger-Gerät, um die Ready-Set-Go-Einleitung des Rennens zu orchestrieren. Der Puls-Trigger spielte eine Gruppe von Events über eine bestimmte Zeit ab, indem er Trigger aktivierte, um Text anzuzeigen und Lichter an der Startlinie zu aktivieren.
Mit der umgewandelten Vorlage wurde das Puls-Trigger-Gerät durch das UEFN-Filmsequenz-Gerät ersetzt, um eine große Eröffnungsfilmsequenz zu erzielen. Mit dem Sequencer kannst du verschiedene Kameras, HUD-Elemente und eine dynamische Aufstellungsansicht hinzufügen, die sich je nach Anzahl der aktiven Spieler anpasst. Ähnlich wie das Puls-Trigger-Gerät zuvor eingerichtet wurde, aktiviert die Levelsequenz die Geräte in wichtigen Momenten und erlaubt es dir zu bestimmen, wann der Score des nächsten Spielers angezeigt oder das Intro geschnitten werden soll.
Insbesondere aktiviert die Level-Sequenz das Trigger-Gerät namens StartPlayerIntroEvent, wenn ein Spieler-Intro beginnt, und aktiviert das Trigger-Gerät namens EndPlayerIntroEvent, wenn ein Spieler-Intro endet. Der Verse-Code verwendet diese Information, um festzustellen, wie viele Spieler-Intros bereits gezeigt wurden, und stoppt die Wiedergabe der Filmsequenz, wenn diese Zahl mit der Anzahl der Spieler im Spiel identisch ist. Wenn die Filmsequenz zuerst beendet wird, wird auch das Warten auf Spieler-Intros abgebrochen, da es im race-Ausdruck steht.
Der Verse-Code ruft WaitForPlayerIntro() für jeden Spieler auf, der eine Schleife für jeden Spieler startet und darauf wartet, dass das StartPlayerIntroEvent-Trigger-Gerät so oft wie die Startpositionsreihenfolge des Spielers aktiviert wird, um zu wissen, wann die Spieler-Stats im HUD angezeigt werden sollen. Jede dieser WaitForPlayerIntro()-Schleifen wird in der FunktionArraySync() aufgerufen, die einen Teilen-und-Herrsche-Gleichzeitigkeitsalgorithmus verwendet, um sich über mehrere asynchrone Funktionen und Array-Elemente hinweg zu synchronisieren.
# A Verse-authored creative device that can be placed in a level
starting_game_sequence := class(creative_device):
# The cinematic that intros the players and their stats.
@editable
StartingLineupCinematic:cinematic_sequence_device = cinematic_sequence_device{}
# The cinematic that we cut to after the lineup and before the race starts.
@editable
RaceStartCinematic:cinematic_sequence_device = cinematic_sequence_device{}
Das Projekt verwendet ein Popup-Dialog-Gerät, um die Widgets im Widget-Editor zu entwerfen und die Informationen mit Verse auszutauschen. Dies geschieht durch die Einstellung des Textes auf den Schaltflächen im Pop-up-Dialog-Gerät
# Updates the Popup UI to display the lifetime stats of the given player during the
# race starting sequence.
UpdatePopupUI<public>(Player:agent, PopupDialogUI:popup_dialog_device):void=
if:
CurrentPlayerStats := GetPlayerStats[Player]
then:
PopupDialogUI.SetButtonText(PlayerText(Player), 0)
PopupDialogUI.SetButtonText(PointsText(CurrentPlayerStats.Points), 1)
PopupDialogUI.SetButtonText(PodiumsText(CurrentPlayerStats.Podiums), 2)
BestLapText:message = if(IsValidBestLapTime[CurrentPlayerStats.BestLapTime]):
Leveldesign
In diesem Update haben wir den Landschafts-Modus verwendet, um eine Offroad-Strecke zu erstellen. Wir haben Speicher gespart, indem wir weniger Assets verwendet haben, und die Berge, die die Strecke umgeben, haben jetzt mehr Tiefe. Wir haben auch Wasservolumes und den Wasserfall verwendet, um einen neuen Typ von Terrain zu erstellen und deinen Blick weiter auf den nächsten Teil der Rennstrecke zu lenken.
Wir haben den Tag-Nacht-Zyklus unseres ursprünglichen Projekts durch die erweiterte Beleuchtung von Fortnite Chapter 4 ersetzt. Mit diesem neuen Zyklus können wir Lumen verwenden, um weichere Schatten und eine realistische globale Beleuchtung zu erzeugen.
Wusstest du, dass es in der ursprünglichen Rennstreckenvorlage über 120 Barrieren gibt? Es wurden Barrieren verwendet, um die Spieler auf der Strecke zu halten und sicherzustellen, dass die Autos die Grenzen nicht verließen. Im Update wirst du feststellen, dass die Barrieren nur dazu verwendet werden, die Spieler vor dem Start eines Rennens auf ihrem Startplatz zu halten und nicht kreuz und quer auf der Strecke verteilt. Renn-Checkpoints, Sammelgegenstände und einige Umgebungsstücke wurden verwendet, um die Spieler zu ermutigen, auf der Strecke zu bleiben:
Münzen für Schub: Durch das Hinzufügen eines Geschwindigkeitsschub-Pads unter der letzten Münze in jeder Serie werden die Spieler ermutigt, auf der Strecke zu bleiben, um die schnellste Rundenzeit zu fahren. Die Münzen respawnen in jeder Runde und bieten so die Möglichkeit, sie erneut einzusammeln, wenn Spieler sie beim ersten Mal verpasst haben.
Visuelles Design, damit die Spieler auf der Strecke bleiben: An vielen Stellen auf der Strecke wurden kurze, weiße Barrieren verwendet, um den beabsichtigten Streckenverlauf zu betonen. Die Straße sollte breit genug für ein paar Autos nebeneinander sein. Die zusätzliche Dekoration und Props wie Bäume, Wohnmobile und andere Designs wurden so platziert, dass das Fahrzeug des Spielers komfortabel navigieren kann, ohne stecken zu bleiben, aber dass er davon abgehalten wird, unbeabsichtigte Pfade zu nehmen.
Abkürzungen und Sprünge: Die ursprüngliche Karte war eine einfache Zahl 8, aber bei Spieltests haben wir herausgefunden, dass die Spieler es lieben, Sprünge zu benutzen, um Abkürzungen zu nehmen. Im neuen Design wurden einige Abkürzungen und Sprünge hinzugefügt, um den Spielern zu erlauben, den Weg zu wählen, auf dem sie die Karte abschließen wollen.
Letztendlich sind die absichtlich platzierten Renn-Checkpoints die letzte Möglichkeit, die Spieler dazu zu bringen, der Strecke zu folgen, denn jeder einzelne ist notwendig, um im Rennen voranzukommen.