Bevor du anfängst
Stellen Sie sicher, dass Sie Folgendes getan haben:
Installed Unreal Engine und Visual Studio für die Unreal Engine eingerichtet
Projekte und Actors kennengelernt und erfahren, wie man im Unreal Editor navigiert
Lesen Sie Ein erstes First-Person-Abenteuerspiel programmieren
Mit einer Vorlage beginnen
Dieses Tutorial beginnt mit einem Blueprint-basierten Projekt, das Beispiel-Assets enthält. Sie werden nach und nach Code hinzufügen, der die bestehende Blueprint-Funktionalität repliziert und erweitert. Auf diese Weise lernen Sie, neue Klassen in einem neuen C++-Projekt zu erstellen und dabei die entsprechenden Blueprints als Referenz zu verwenden.
Um ein neues Spiel-Projekt aus einer Vorlage zu erstellen, befolgen Sie diese Schritte:
Öffnen Sie die Unreal Engine. Gehen Sie im Unreal-Projektbrowser zur Spiele -Kategorie und wählen Sie die Vorlage First Person.
Behalten Sie in den Projektvorgaben den Projekttyp auf Blueprint bei. Das bedeutet, die Unreal Engine erstellt ein Projekt mit Blueprint-Standard-Assets anstatt C++-Assets.
Wählen Sie für die Variante Arena-Shooter aus.
Benenne dein Projekt. Dieses Tutorial verwendet
AdventureGameals Projektnamen.Klicken Sie auf Erstellen, um Ihr neues Projekt im Editor zu öffnen.
Erweiterten Input verifizieren
Mit dem Erweiterten Eingabesystem können Sie die Bewegung Ihres Charakters steuern, indem Sie benutzerdefinierte Input-Actions erstellen, die definieren, welche Actions Ihr Charakter ausführen kann, z. B. Springen oder Ducken. Jede Input-Action existiert als Daten-Asset, das Sie im Code referenzieren können, um zwischen Ihrem Code und Ihrem Charakter zu kommunizieren.
Später in diesem Tutorial werden Sie Input-Actions und Code kombinieren, damit Ihr Charakter sich bewegen und umsehen kann.
Das Erweiterte Eingabesystem sollte in Ihrem Projekt bereits aktiviert sein. Befolgen Sie diese Schritte, um dies zu überprüfen:
Gehen Sie im Menü des Unreal Editors ins Menü Bearbeiten und wählen Sie Plugins.
Suchen Sie nach Enhanced Input. Das Plugin sollte installiert und aktiviert sein.
Mehr Informationen zum Erweiterten Eingabesystem und den Input-Actions finden Sie hier: Enhanced Input.
Erstellen Sie eine C++-Spiel-Modus-Klasse
Ihr Blueprint-basiertes Projekt verfügt nicht über C++-Dateien oder ein Visual-Studio-Projekt, mit dem Sie arbeit können. Als Nächstes erstellen Sie Ihre erste Klasse und führen C++ in Ihr Projekt ein. Erstellen Sie zuerst eine benutzerdefinierte Spiel-Modus-Klasse, die die Unreal Engine anweist, das Visual-Studio-Projekt und die Dateien zu generieren, die Sie zum Programmieren benötigen. Ihre benutzerdefinierte Klasse wird von der AGameModeBase-Parent-Klasse abgeleitet.
Spiel-Modus-Assets definieren die Regeln, Siegbedingungen und die verwendeten Charaktere eines Spiels. Der Spiel-Modus legt auch die Standard-Gameplay-Framework-Klassen fest, die Ihr Projekt verwendet, darunter den Pawn, PlayerController und HUD. Später in diesem Tutorial werden Sie Ihren Spiel-Modus verwenden, um den Standard-Spieler-Charakter zu ändern.
Um eine neue Spiel-Modus-C++-Klasse zu erstellen, befolgen Sie diese Schritte:
Gehen Sie im Menü des Unreal Editors zu Werkzeuge > Neue C++-Klassen.
Suchen und wählen Sie im Fenster Parent-Klasse auswählen die Spiel-Modus-Basis und klicken Sie auf Weiter.
Geben Sie einen Namen für die neue Klasse ein und klicken Sie dann auf Klasse erstellen. Dieses Tutorial verwendet
AdventureGameMode.Es erscheinen zwei Warnmeldungen, die Sie benachrichtigen, dass Sie Ihr C++-Projekt mindestens einmal aus VS kompilieren müssen, bevor die Klassen im Inhaltsbrowser erscheinen. Klicken Sie auf OK und dann bei der zweiten Warnung auf Ja , um Ihren Code zu öffnen.
Ihr Projekt erstellen
Bevor Sie anfangen, Code hinzuzufügen, sollten Sie die Vorbereitung Ihrer Umgebung abschließen, indem Sie Ihr Projekt in VS erstellen und den Unreal Editor aktualisieren.
Projekt in Visual Studio öffnen
Falls die Engine Sie nicht automatisch aufgefordert hat, Ihr Projekt in VS zu öffnen, nachdem Sie die Spiel-Modus-Klasse erstellt haben, gehen Sie im Menü des Unreal Editors zu Werkzeuge und wählen Sie Visual Studio öffnen.
Hier finden Sie auch standardmäßig die .sln-Datei Ihres Projekts in /Documents/Unreal Projects/[Projektname].
Unreal Engine verfolgt Änderungen, die Sie an Ihrem Projekt vornehmen, wie das Hinzufügen neuer Klassen, Module, Plugins oder das Ändern der Build-Einstellungen. Allerdings spiegeln die VS-Projektdateien diese Aktualisierungen möglicherweise nicht automatisch wider. Verwenden Sie Visual-Studio-Projekt aktualisieren (auch im Menü Werkzeuge), um die Lösung und die Projektdateien basierend auf dem aktuellen Zustand erneut zu generieren, damit alles auf dem neuesten Stand ist.
Wenn Sie Visual Studio öffnen, sehen Sie Ihre Projektdateien im Lösungs-Explorer.
Öffnen Sie im Lösungs-Explorerden Eintrag Spiele > [Projektname] > Quelle > [Projektname]. Hier befinden sich die Hauptdateien für Ihr Spiel, darunter zwei Dateien für Ihren neuen Spiel-Modus, [GameModeName].cpp und [GameModeName].h.
Das Projekt erstellen und den Unreal Editor aktualisieren
Damit der Unreal Editor Ihr Code-Projekt erkennt und Ihre C++-Klassen in den Inhaltsbrowser eingebunden werden, müssen Sie Ihr Projekt aus VS heraus erstellen und den Editor neu starten.
Befolgen Sie diese Schritte, um Ihr Projekt zu erstellen, damit dessen Klassen im Unreal Editor erscheinen:
Klicken Sie im Lösungs-Explorer unter Spiele > [Projektname] auf Ihr Projekt und wählen Sie Build aus.
Wenn der Build abgeschlossen ist, kehren Sie zurück zum Unreal Editor und prüfen Sie, ob in der unteren Werkzeugleiste die Schaltfläche Kompilieren erschienen ist und ob ein neuer C++-Klassen-Ordner im Inhaltsbrowser aufgetaucht ist.
Wenn sie nicht erscheinen, schließen Sie den Editor und öffnen Sie Ihr Projekt erneut. Beim Öffnen des Editor wird Ihr Projekt neu kompiliert und der UE wird mitgeteilt, dass Ihre C++-Klassen existieren. Falls die Unreal Engine Sie dazu auffordert, Ihr Projekt neu zu erstellen, klicken auf Ja.
Live Coding deaktivieren
Deaktivieren Sie Live Coding im Unreal Editor, bevor Sie Ihren Code erneut kompilieren. Mit Live Coding können Sie C++-Code in Implementierungsdateien (.cpp) ändern und neu erstellen, während die Engine läuft; es folgt jedoch einem anderen Kompilierungs-Workflow und kann zu Fehlern führen, wenn Sie Header-Dateien (.h) bearbeiten oder aus Visual Studio heraus kompilieren. Live Coding ist nützlich, wenn Sie mit einer entwickelten Codebasis arbeiten, wir empfehlen aber, die Funktion zu deaktivieren, wenn Sie ein neues Projekt starten.
Um Live Coding zu deaktivieren, klicken in der unteren Werkzeugleiste des Editors auf die drei Punkte neben der Schaltfläche Kompilieren und deaktivieren Sie Live Coding aktivieren.
Eine C++-Klasse zu Blueprints erweitern
Nachdem Sie nun Ihren eigenen benutzerdefinierten Spiel-Modus erstellt haben, erweitern Sie ihn auf Blueprints, um seine Eigenschaften dem Editor zur Verfügung zu stellen, und legen Sie dann diesen neuen Blueprint als Standard-Spiel-Modus Ihres Projekts fest.
Wenn Sie Ihre Spiel-Modus-Klasse um Blueprints erweitern, werden Klassenwerte direkt im Editor angezeigt, anstatt alles über Code zu erledigen. Der Blueprint agiert als Child der C++-Klasse und erbt die gesamte Funktionalität der Klasse.
Befolgen Sie diese Schritte, um ein Blueprint-Asset von Ihrer GameMode-Klasse abzuleiten:
Gehen Sie im Inhaltsbrowser-Asset-Baum zu C++-Klassen > [Projektname], um die von Ihnen erstellten C++-Klassen zu finden.
Klicken Sie mit der rechten Maustaste auf Ihre Spiel-Modus-Basis-Klasse und wählen Sie Blueprint-Klasse basierend auf [GameModeBaseName] erstellen aus.
Benennen Sie im Fenster Blueprint-Klasse hinzufügen Ihren Blueprint mit dem Präfix
BP_, damit Sie ihn später identifizieren können. Dieses Tutorial verwendetBP_AdventureGameMode.Wählen Sie für den Pfad Alles > Inhalt > FirstPerson > Blueprintsund klicken Sie dann auf Klasse erstellen.
Die Unreal Engine öffnet den Blueprint automatisch in einem neuen Blueprint-Editor-Fenster.
Sie können das neue Fenster im Hauptfenster des Editors andocken, indem Sie den Tab des Blueprints neben dem Karte-Tab (Lvl_FirstPerson) im Hauptfenster des Editors ziehen.
Spiel-Modus des Projekts ändern
Neue Unreal-Engine-Projekte verwenden standardmäßig einen Beispiel-Spiel-Modus. Um dies in Ihren benutzerdefinierten Spiel-Modus zu ändern, müssen Sie die Einstellungen Ihres Projekts bearbeiten.
Um den standardmäßigen Spiel-Modus zu ändern, befolgen Sie diese Schritte:
Gehen Sie im Mhauptmenü des Editors zu Bearbeiten > Projekt-Einstellungen.
Wählen Sie im Abschnitt Projekt im linken Panel Karten und Modi aus.
Ändern Sie oben in der Einstellungen-Tabelle den Standard-Spiel-Modus zu Ihrem Spiel-Modus-Blueprint.
Schließen Sie die Projekt-Einstellungen.
Navigieren Sie im Hauptmenü zu Fenster > Welteinstellungen. Standardmäßig wird das Welteinstellungen-Panel neben dem Details-Panel angedockt angezeigt. Diese Einstellungen steuern, wie sich das aktuelle Level verhält.
Setzen Sie im Abschnitt Spiel-Modus GameMode Override auf Ihren neuen Spielmodus-Blueprint.
Sie müssen den GameMode Override nur für mögliche Sample-Level ändern. Wenn Sie ein neues, leeres Level erstellen, ist GameMode Override standardmäßig auf Keiner gesetzt.
Eine Debug-Nachricht auf dem Bildschirm hinzufügen
Ein guter Anfang, um Ihrem Projekt Code hinzuzufügen, ist das Hinzufügen einer „Hallo Welt!“-Nachricht auf dem Bildschirm.
Fügen Sie eine Debug-Nachricht hinzu, um zu bestätigen, dass Sie Ihren neuen Spiel-Modus verwenden und nicht den Standard-Spiel-Modus der Unreal Engine. Log-Nachrichten und Debug-Nachrichten sind nützlich, um Code während der Entwicklung zu überprüfen und zu debuggen.
Standard-StartPlay()-Funktion überschreiben
AGameModeBase enthält eine StartPlay()-Funktion, die die UE aufruft, wenn das Spiel bereit ist, das Gameplay zu beginnen. Sie überschreiben diese Funktion in Ihren benutzerdefinierten GameMode-Klassen, um globale Spielstart-Logik hinzuzufügen. Hier überschreiben Sie den Wert, damit beim Spielstart eine Debug-Nachricht erscheint.
Befolgen Sie diese Schritte, um StartPlay() in Ihrer benutzerdefinierten GameMode-Klasse zu überschreiben:
Öffnen Sie die
.h--Header-Datei Ihrer Spiel-Modus-Klasse in VS. Der Beispiel-Code in diesem Tutorial verwendet eine Klasse namensAdventureGameMode.Der Standardcode sollte so aussehen:
C++UCLASS() class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase { GENERATED_BODY() };GENERATED_BODY()ist ein Makro, das vom Unreal Header Tool verwendet wird, um automatisch den Code zu generieren, der für diese Klasse und andere UObjects erforderlich ist, um mit der Unreal Engine zu funktionieren. Mehr Informationen zum Unreal Header Tool finden Sie in der UHT documentation.Die
AAdventureGameMode-Klasse stellt Ihrem Code verschiedene Spiel-Modus-Zustände bereit, darunter Beginn oder Ende eines Spiels, Betreten einer Karte oder ein laufendes Spiel. Wenn der jeweilige Zustand ausgelöst wird, wird eine assoziierte Funktion wieStartPlay()oderResetLevel()ausgeführt.Fügen Sie Ihrer
AAdventureGameModeBase-Klasse eine Override-Deklaration für dieStartPlay()-Funktion hinzu.C++UCLASS() class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase { GENERATED_BODY() virtual void StartPlay() override; };Speichern Sie die
.h- Datei.
Unreal-Engine-Klassen und -Funktionen haben Präfixe, die dem Unreal Header Tool den Klassentyp mitteilen. Zum Beispiel das Präfix A für Actors, U für UObjects und F für Strukturen. Mehr Informationen zu C++-Klassenpräfixen in der Unreal Engine finden Sie hier: Epic C++ Coding Standards: Naming Conventions.
Debug-Nachricht zu StartPlay() hinzufügen
Implementieren Sie Ihre StartPlay()-Überschreibung mit benutzerdefiniertem Code, der eine Debug-Nachricht ausgibt.
Befolgen Sie diese Schritte, um bei Beginn des Gameplays eine Debug-Nachricht auf dem Bildschirm anzuzeigen:
Öffnen Sie die
.cpp-Datei Ihres Spiel-Modus, um die soeben deklarierte Funktion zu implementieren.Fügen Sie eine neue Funktionsdefinition für
StartPlay()hinzu. Diese Funktion wird inAAdventureGameModedeklariert, also definieren Sie sie mitAAdventureGameMode::StartPlay().C++void AAdventureGameMode::StartPlay() { }Fügen Sie in
AMyGameModeBase::StartPlay()Super::StartPlay()hinzu, um dieStartPlay()-Funktion aus der Parent-KlasseAAdventureGameModeaufzurufen. Das ist notwendig, um die andere Logik zu verarbeiten, die beim Spielstart ausgeführt werden soll.Fügen Sie als Nächstes einen
checkaufGEngine != nullptrhinzu, um sicherzustellen, dass der globale Engine-Zeiger gültig ist.C++void AAdventureGameMode::StartPlay() { Super::StartPlay(); check(GEngine != nullptr); }Das ist ein Pointer auf die UEngine-Klasse, die die Unreal Engine selbst verwendet. Die Prüfung, ob dieser gültig ist, sichert, dass Ihr Spiel korrekt ausgeführt wird, bevor der Code fortgesetzt wird. Wenn der globale Engine-Zeiger nicht gültig ist, stürzt Ihr Spiel ab.
Verwenden Sie die
GEngine, um auf dieAddOnScreenDebugMessage()-Mitgliederfunktion der UEngine Zugang zu erhalten, die eine Nachricht auf dem Bildschirm anzeigt, wenn das Spiel läuft.Diese Funktion nimmt vier Werte entgegen:
Einen eindeutigen int-Schlüssel, der die Nachricht identifiziert und verhindert, dass dieselbe Nachricht mehrfach hinzugefügt wird. Verwenden Sie
-1, wenn die Einzigartigkeit keine Rolle spielt.Eine Float-Zahl in Sekunden für die Anzeige der Nachricht.
Eine
FColor, die die Textfarbe festlegt.Eine
FString-Nachricht, die ausgegeben werden soll.
Verwenden Sie folgende Werte, wird fünf Sekunden lang eine „Hallo Welt!“-Nachricht auf dem Bildschirm angezeigt, wenn das Spiel beginnt:
C++GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World, this is AdventureGameMode!"));Speichern Sie die
.cpp-Datei.
Nun sollte AAdventureGameMode::StartPlay() so aussehen:
#include "AdventureGameMode.h"
void AAdventureGameMode::StartPlay()
{
Super::StartPlay();
check(GEngine != nullptr);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World!"));
}UE_Log ist eine weitere hilfreiche Funktion zum Ausgeben von Debug-Nachrichten. Anstatt eine Nachricht auf dem Bildschirm auszugeben, werden Nachrichten während der Laufzeit im Output-Log oder der Konsole der Unreal Engine aufgezeichnet. Sie sind nützlich, um detaillierte Informationen über das Geschehen in Ihrem Spiel zu protokollieren oder zu verfolgen. Sie können Logs in verschiedene Kanäle kategorisieren und den Nachrichtentyp (z. B. Informations-, Fehler- oder Warnmeldungen) definieren. Ein Beispiel:UE_LOG(LogTemp, Warning, TEXT("Dies ist eine Warnmeldung!"));
Ihren Code kompilieren und testen
Sie können im Unreal Editor auf die Schaltfläche Kompilieren klicken, um Ihr Projekt neu zu erstellen; wir empfehlen jedoch die Neuerstellung aus VS heraus. Nach dem Kompilieren sehen Sie, wie sich Ihre Codeänderungen im Editor und im Spiel bemerkbar machen.
Um Ihre Änderungen im Spiel zu sehen, klicken Sie auf Spielen in der Haupt-Symbolleiste, um den Modus Play in Editor (PIE) zu starten. Ihre Debug-Nachricht erscheint oben links.
Um den PIE-Modus zu beenden, drücken Sie Umschalttaste + Escape oder klicken Sie auf Stopp in der Symbolleiste des Level-Editors.
Als Nächstes
Nun haben Sie ein grundlegendes Projekt mit einem neuen Spiel-Modus, und Sie können mit der Erstellung Ihres Spieler-Charakters beginnen! Im nächsten Abschnitt erstellen Sie eine neue Charakterklasse und lernen, wie Sie mit Input-Actions Ihrem Charakter Bewegungssteuerelemente hinzufügen.
Einen Spieler-Charakter mit Input-Actions erstellen
Lernen Sie, wie Sie einen C++-Charakter mit Input-Actions erstellen.
Vollständiger Code
Dies ist der vollständige Code, der in diesem Teil erstellt wurde:
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "AdventureGameMode.generated.h"
UCLASS()
class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase
{
GENERATED_BODY()
#include "AdventureGameMode.h"
void AdventureGameMode::StartPlay()
{
Super::StartPlay();
check(GEngine != nullptr);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World!"));
}