Wenn du die Grundlagen der Unreal Engine erlernst, musst du auch wissen, wie das Unreal-Gameplay-Framework funktioniert. In diesem Dokument behandeln wir, wie wir die Klassen für den Spielmodus und den Spielstatus für „Parrot“ einrichten.
Spielmodus
Der Spielmodus ist für die Definition grundlegender Spielregeln verantwortlich, wie z. B. die Anzahl der Spieler oder wie Spieler dem Spiel beitreten. Außerdem bietet es ein Framework zum Einrichten nützlicher Klassen für Spiele, wie z. B. den Spielstatus, den Player-Controller, das HUD und die Standard-Pawn-Klasse.
Um den Spielmodus für „Parrot“ einzurichten, kannst du diesen Schritten folgen:
Klicke im Inhaltsbrowser auf Inhalt > Blueprints > Spiel.
Klicke mit der rechten Maustaste in den Browser und klicke dann auf Blueprint-Klasse.
Definiere die Parent-Klasse als AGameModeBase.
Nenn die Klasse „BP_ParrotGameMode“.
Doppelklicke auf den neu erstellten Blueprint, um die darin definierten Klassen zu sehen. Für „Parrot“ sollten einige dieser Klassen geändert werden:
Spielstatus-Klasse sollte auf BP_ParrotGameState eingestellt werden
Player-Controller-Klasse sollte auf BP_ParrotPlayerController eingestellt werden
HUD-Klasse sollte auf BP_ParrotHUD eingestellt werden
Standard-Pawn-Klasse sollte auf BP_ParrotPlayerCharacter eingestellt werden
Geh zu Bearbeiten > Projekt-Einstellungen > Karten & Modi und setz den Standard GameMode auf BP_ParrotGameMode.
Da der Spielmodus nun eingerichtet ist, kannst du den Spielstatus einstellen.
Der Spielstatus
Der Spielstatus handhabt, was gerade im Spiel passiert. Er verwaltet Informationen, die die Clients kennen müssen, ist aber nicht an einen bestimmten Spieler gebunden. Zum Beispiel kannst du hier die Scores eines Teams speichern.
Um einen Spielstatus für „Parrot“ zu erstellen, folge diesen Schritten:
Wähle im Haupteditor Werkzeuge > Neue C++-Klassen...
Definiere die Parent-Klasse als AGameStateBase.
Nenn die Klasse „AParrotGameState“.
Klicke im Inhaltsbrowser auf + Hinzufügen > Blueprint-Klasse.
Definiere die Parent-Klasse als AParrotGameState.
Nenn die Klasse „BP_ParrotGameState“.
Weise in deinem Blueprint für den Spielmodus BP_ParrotGameState dem Feld für den Spielstatus zu.
Spielmodus und Spielstatus: Konzeptübersicht
Weitere Informationen über den Spiel-Modus und den Spielstatus finden Sie unter Game Mode and Game State (Spiel-Modus und Spielstatus). Wenn während der Entwicklung neue Klassen erstellt werden, denken Sie daran, Ihren Spiel-Modus und den Spielstatus zu aktualisieren.
Der Spielmodus kann auch pro Karte eingestellt werden. Das Hauptmenü in „Parrot“ verwendet einen anderen Spielmodus als den, der in den Levels des Spiels verwendet wird.
Spielinstanz
Die Spielinstanz ist eine einzelne dauerhafte Instanz einer Klasse in der Engine, die projektspezifische Funktionen handhabt. Sie existiert für die gesamte Lebenszeit deiner Anwendung. Sie enthält den Viewport-Client des Spiels und den lokalen Spieler.
Nach dem gleichen Muster wie beim Spielmodus und -status erstellen wir eine Basis-Klasse, UParrotGameInstance, und eine Blueprint-Klasse, BP_ParrotGameInstance. Du kannst die Klasse der Spielinstanz für dein Projekt unter Bearbeiten->Projekt-Einstellungen->Karten & Modi festlegen.
Um eine Spielinstanz für „Parrot“ zu erstellen, folge diesen Schritten:
Wähle im Haupteditor Werkzeuge > Neue C++-Klassen...
Definiere die Parent-Klasse als UGameInstance.
Nenn die Klasse „UParrotGameInstance“.
Klicke im Inhaltsbrowser auf + Hinzufügen > Blueprint-Klasse.
Definiere die Parent-Klasse als UParrotGameInstance.
Nenn die Klasse „BP_ParrotGameInstance“.
Geh zu Bearbeiten > Projekt-Einstellungen > Karten & Modi und setz die Klasse Spielinstanz auf BP_ParrotGameInstance.
Level-Streaming Beispiel
In „Parrot“ sind verschiedene Karten spezifisch für verschiedene Modi, und die Spielinstanz teilt dem Spiel mit, welche Karte geladen werden soll, indem sie UParrotMapDataAsset-Dateien verwendet. Dabei handelt es sich um Daten-Assets, die einen Soft-Objekt-Pointer auf eine Kartendatei enthalten. Diese Assets werden in der Spielinstanz organisiert und können im Laufe des Spielerfortschritts durchlaufen werden. Da dies in der Spielinstanz geschieht, kannst du das nächste Level jederzeit von überall her streamen. Der Player-Controller beobachtet Spielstatusänderungen und ruft dann bei Bedarf die Spielinstanz auf.
Der folgende Screenshot zeigt einen Blueprint, der den Level-Streaming-Knoten und Async Load Asset-Knoten verwendet, um asynchron die Referenz eines weichen Objekts auf ein ParrotMapDataAsset zu laden. Dann wird der Level öffnen-Knoten aufgerufen, ohne dass du synchrones Laden abwarten musst, da der Level bereits geladen wurde. Das CommonLoadingScreen-Plugin wird auch hier verwendet. Das Ladebildschirm-Widget wird während des Vorladens der nächsten Karte aufgerufen und während des Nachladens entfernt.
Mehr Details über den Ladebildschirm und warum „Parrot“ hier asynchron statt synchron lädt, findest du in der Dokumentation Benutzeroberfläche für „Parrot“.