In der objektorientierten Programmierung gibt es zwei wichtige Variablenarten:
Primitive wie Integer, Textzeichen, Fließkommazahlen und Boolesche Variablen.
Objekte wie Actors und Actor-Komponenten.
Jede davon verhält sich anders, wenn Sie ihre Werte abrufen oder festlegen.
Wenn Sie eine Variable vom primitiven Typ erstellen, erstellt diese eine neue Instanz dieses Primitivs und initialisiert ihren Wert automatisch auf 0 (oder den Gegenwert für diesen primitiven Typ). Wenn Sie zum Beispiel eine Variable vom Ganzzahl-Typ namens MyInt erstellen, existiert diese Variable sofort mit einem Wert von 0 und Sie können mathematische Operationen damit durchführen. Jede neue Ganzzahl-Variable, die Sie im Variablen-Panel erstellen, erzeugt standardmäßig eine ganz neue Ganzzahl mit ihrem eigenen, einzigartigen Wert. Durch das Festlegen ihres Werts wird der Wert dieser Ganzzahl verändert.
Wenn Sie eine Objekttyp-Variable erstellen, wird KEINE neue Instanz dieses Objekts erstellt. Stattdessen agiert die Variable als Referenz auf ein Objekt. Sie können sich die Variable als Platzhalter vorstellen, der auf ein beliebiges Objekt verweisen könnte, das seiner Definition entspricht. So erhalten Sie eine Abkürzung in Ihrem Code, um schnell zugreifen zu können. Wenn Sie einen Wert für eine Objektvariable zuweisen oder festlegen, ersetzt dies nicht das vorherige Objekt und verändert es nicht. Stattdessen ändert es, auf welches Objekt die Referenz zeigt, während das vorherige Objekt weiter existiert, bis es explizit gelöscht wird. Um ein neues Objekt zu instanzieren, müssen Sie ein Objekt erstellen. Um darauf Zugriff zu erhalten, müssen Sie es einer Referenz zuweisen.
Diese Anleitung führt Sie am Beispiel eines Teleporters durch diese Methoden der Interaktion mit Objektreferenzen. Nach Abschluss der folgenden Tutorials sind Sie in der Lage:
Objektreferenzen zu erstellen und ihnen Objekten zuzuweisen.
Objektreferenzen zu verwenden, um auf Funktionen von Objekten zuzugreifen und Code auf ihnen auszuführen.
Objektreferenzen im Details-Panel zuzuweisen.
Objektreferenzen neu zuzuweisen.
Erforderliche Einrichtung
In diesem Tutorial wird ein neues Projekt mit den folgenden Einstellungen verwendet:
Third-Person-Vorlage.
Nur in Blueprint.
Erstellen eines Actor, der einen anderen Actor referenziert
Um zu demonstrieren, wie Objektreferenzen funktionieren, erstellen Sie einen Actor, der zwei andere Actors referenziert:
Eine Teleportieren-Position, die als Position dient, wohin ein Actor teleportieren werden soll.
Ein Ziel-Actor, der als der zu teleportierende Actor fungiert.
So richten Sie einen Actor mit diesen Referenzen ein:
Erstellen Sie eine neue Blueprint-Klasse mit TriggerBox als Parent-Klasse. Geben Sie ihr den Namen BP_TeleporterActor.
Öffnen Sie den Blueprint für BP_TeleporterActor und klicken Sie auf den Tab EventGraph.
Klicken Sie auf die Schaltfläche + im Variablen-Panel, um eine neue Variable hinzuzufügen. Nennen Sie sie TargetActor und legen Sie ihren Typ auf Actor fest.
Erstellen Sie eine weitere Actor-Variable namens TeleportLocation. Das ist die Position, an die Sie Ihren Ziel-Actor teleportieren.
Klicken Sie auf das Auge-Symbol für TeleportLocation, um sicherzustellen, dass es im Details-Panel sichtbar ist.
Jede dieser Variablen ist ein Platzhalter, der einen Actor in der Welt referenzieren kann. Keiner davon zeigt bisher auf einen Actor, aber Sie können damit eine Logik für das erstellen, was der Teleporter tun soll.
Abrufen einer Actor-Referenz in Blueprint und teleportieren an eine andere Position
Nachdem Sie jetzt Ihre Actor-Variablen eingerichtet haben, erstellen Sie die Logik für die Handhabung der Teleportation. Dazu müssen Sie eine Abrufen-Operation ausführen, um eine Referenz auf Ihre Actors abzurufen.
Klicken Sie in BP_TeleporterActor auf TargetActor und ziehen es in den Event Graph. Klicken Sie in dem nun angezeigten Dropdown-Menü auf TargetActor abrufen. Dadurch wird ein Get-Knoten erstellt.
Sie können auf die Funktionen dieses Actor zugreifen, indem Sie den Pin auf dem Get-Knoten anklicken und ihn ziehen.
Klicken und ziehen Sie den „Get Target Actor“-Knoten in das angezeigte Suchfeld, suchen Sie nach Actor-Position festlegen und klicken Sie darauf, um einen neuen „Set Actor Location“-Knoten zu erstellen. Aktivieren Sie das Teleportieren-Feld.
Verbinden Sie Event ActorBeginOverlap mit dem „Set Actor Location“-Knoten.
Klicken und ziehen Sie TeleportLocation in den Event Graph und erstelle Sie einen Get-Knoten.
Klicken und ziehen Sie Get TeleportLocation im den Event Graph und erstellen Sie dann einen neuen Get Actor Location-Knoten.
Verbinden Sie den „Get Actor Location“-Knoten mit dem New Location-Pin des „Set Actor Location“-Knotens.
Wenn Sie versuchen, diesen Code auszuführen, schlägt er fehl und gibt einen Fehler aus, da die Referenzen TargetActor und TeleportLocation derzeit leer sind. Mit anderen Worten, sie zeigen noch auf nichts und sind nur Platzhalter. In den nächsten Abschnitten sehen Sie, wie Sie diese Werte einrichten.
Festlegen einer Actor-Referenz in Blueprint
Nutzen Sie als Nächstes die Set-Operation, um den Ziel-Actor auf einen beliebigen Actor zu setzen, der in das Auslöserfeld gerät.
Klicken und ziehen Sie TargetActor aus dem Variablen-Panel in den Event Graph. Erstellen Sie dieses Mal einen Set TargetActor-Knoten.
Verbinden Sie den „Set TargetActor“-Knoten mit Event ActorBeginOverlap und Set Actor Location.
Klicken und ziehen Sie die Variable Anderer Actor von ActorBeginOverlap zum Input-Pin von Set TargetActor.
Damit wird festgelegt, dass TargetActor auf jeden Actor verweist, der sich in das Auslöserfeld bewegt. Sie können sich das als eine Möglichkeit vorstellen, eine Aufzeichnung darüber zu führen, was als Letztes in den Teleporter gelangt ist. Das endgültige Diagramm sollte folgendermaßen aussehen:
Festlegen einer Actor-Referenz im Details-Panel
Legen Sie abschließend die Position fest, zu der Sie Ihren Actor teleportieren wollen.
Klicken und ziehen Sie eine Instanz von BP_TeleporterActor in die Welt. Benennen Sie sie in Teleporter1 um.
Klicken und ziehen Sie eine Instanz eines leeren Actor in die Welt. Benennen Sie sie in TeleportLocation1 um.
Klicken Sie auf Teleporter1. Klicken Sie im Details-Panel auf die Dropdown-Liste für Teleportposition und legen Sie diese auf TeleportLocation1 fest. Sie können auch die Pipette verwenden, um sie in der Welt selbst auszuwählen.
Verschieben Sie Teleporter1, sodass das Auslöserfeld vollständig über dem Boden ist. Suchen Sie im Details-Panel die Einstellung Im Spiel ausgeblendeter Actor und deaktivieren diese. Dies ermöglicht es Ihnen, den Teleporter zu sehen, wenn Sie Ihr Spiel ausführen, und dann direkt in das Auslöserfeld für den Teleporter zu gehen.
Wenn Sie mehrere Teleporter erstellen, kann für jeden eine anderen Teleport-Position festgelegt werden, da diese Referenzen für jede einzelne Instanz des Teleporters verfolgt werden.
Testen Ihres Teleporters
Da Sie den Objektreferenzen im Teleporter jetzt Actors zugewiesen haben, ist er funktionsbereit. Klicken Sie auf die Schaltfläche Spielen, um Ihr Spiel im Editor auszuführen. Laufen Sie dann direkt in das Auslöserfeld für Teleporter1.
Das passiert:
Teleporter1 ruft Ihren Charakter im BeginOverlap-Event ab und weist ihn dann TargetActor zu.
Er ruft dann eine Referenz auf TargetActor ab und legt seine Position auf den Standort von TeleportLocation1 fest. Die Referenz auf TeleportLocation1 wird im Details-Panel für Teleporter1 zugewiesen, sodass keine Notwendigkeit besteht, die Referenz im Code festzulegen.
Wenn ein anderer Actor das Auslöserfeld von Teleporter1 betritt, wird der TargetActor stattdessen auf diesen Actor gesetzt und er wird ebenfalls nach TeleportLocation1 teleportiert.