In diesem Tutorial erstellst du eine Logik zum Antrieb einer beweglichen Plattform und aktivierst diese mit den Gameplay-Objekten, die du in Rätsel: Schalter und Würfel gebaut hast. Du wirst auch die Spielmechanik Zeit in Ihr Rätsel integrieren.
Durch die Verwendung eines modularen Arbeitsablaufs können Sie Maßstab, Bewegung, Ziel und Geschwindigkeit der Plattform vom Viewport aus ändern. Du kannst außerdem mit einem einzigen Klick auswählen, welche Plattform ein beliebiger Schalter aktivieren soll.
Dank dieser Flexibilität können Sie während des Entwurfs Änderungen an Ihrem Level vornehmen und dessen Funktionalität im laufenden Betrieb testen. Effiziente und flexible Designentscheidungen verbessern die Geschwindigkeit und Belastbarkeit Ihrer Entwicklungspipeline.
Bevor du anfängst
Dieses Tutorial setzt voraus, dass du bereits ein Verständnis der folgenden Themen hast, die in den vorherige Sektionen von Entwerfen eines Rätsel-Abenteuers behandelt wurden:
Materialien
Blueprints
Variablen
Blueprint-Interfaces
Play-In-Editor-Modus
Du benötigst die folgenden Assets, die in Erstellen eines Schlüssels und Rätsel: Schalter und Würfel erstellt wurden:
BP_SwitchBP_CubeBP_KeyBPI_InteraktionM_BasicColorM_EmissiveColorM_BasicColor_Blue
Erstelle eine bewegliche Plattform
Indem du lernst, wie du eine bewegliche Plattform erstellst und mit einem Schalter aktivierst, kannst du einfache Funktionen entwerfen, beispielsweise den Transport eines Spielers über ein Level. Schalter, Würfel und Plattform können kombiniert werden, um komplexe Funktionen zu erstellen, beispielsweise ein komplettes Plattform-Rätsel – wie das, das wir am Ende dieses Tutorials bereitstellen.
Um deinen Workflow modular zu halten, beginne mit der Erstellung einer Materialinstanz und einer Blueprint-Klasse für die Plattform.
Erstellen einer Materialinstanz
Um eine Materialinstanz für die Plattform zu erstellen, gehe folgendermaßen vor:
Im Inhaltsbrowser in AdventureGame > Designer > Materialien, klicke mit der rechten Maustaste auf M_BasicColor und wähle Materialinstanz erstellen.
Benenne die Instanz
M_BasicColor_Orange. Doppelklicke auf die Instanz, um sie im Material-Editor zu öffnen.Expandiere Globale Vektorparameterwerte und aktiviere Farbe, um es zu überschreiben.
Stelle den Farbe-Parameter auf den Hex sRGB-Wert
F76E00FFein.Speichere die Instanz und schließe sie.
Dein Materialordner sollte jetzt folgendermaßen aussehen:
Einrichten einer Blueprint-Klasse
Um eine Blueprint-Klasse für die Plattform zu erstellen, führe die folgenden Schritte aus:
Im Inhaltsbrowser, navigierst du zu AdventureGame > Designer > Blueprints und erstellst einen neuen Ordner mit dem Namen
Plattformen.Innerhalb des Plattformen-Ordners, klickst du mit der rechten Maustaste und erstellst eine neue Blueprint-Klasse.
Im Parent-Klasse auswählen-Dialogfeld wählst du Actor und benennst den neuen Blueprint
BP_Plattform.Doppelklicke darauf, um
BP_Plattformim Blueprint-Editor zu öffnen.Im Tab Komponenten erstellst du ein statisches Mesh, indem du auf Hinzufügen klickst, nach
Würfelsuchst und es auswählst.Benenne das Mesh
Plattform.Im Details-Panel unter dem Materialien-Titel, stellst du Element 0 auf
M_BasicColor_Orange.
Um den Maßstab deiner Plattform im Level-Editor schnell anzupassen und Plattformen unterschiedlicher Größe zu erstellen, kannst du eine bearbeitbare Variable verwenden:
Im Tab Mein Blueprint navigieren Sie zum Variablen-Titel. Klicke auf die Schaltfläche +, um eine Variable zu erstellen und sie
Plattform-Maßstabzu benennen.Stelle den Pin-Typ auf Vektor ein und klicke auf das Augensymbol so, dass das Auge offen ist.
Im Details-Panel, neben Kategorie, fügst du es der
Einstellen-Kategorie hinzu.Kompiliere deinen Blueprint, dann legst du den Standardwert von Plattform-Maßstab auf
2,2,0,1.Ziehe im Konstruktions-Script-Diagramm den vom Konstruktions-Script-Knoten besessenen Exec-Pin und erstelle Weltmaßstab 3D (Plattform).
Ziehe den Neuer Maßstab-Pin auf dem Weltmaßstab 3D einstellen-Knoten und erstellen einen PlatformScale holen-Knoten. Dadurch werden neue Skalierungswerte auf die Plattform-Mesh-Komponente angewendet.
Speichern und Kompilieren.
Dein Konstruktions-Script-Diagramm sollte nun so aussehen:
Wenn du dieses Snippet in deinem Diagramm kopierst, musst du den Konstruktions-Script-Eintragsknoten mit Weltmaßstab 3D einstellen verbinden.
Wenn du zurück zum Viewport-Tab des Blueprints gehst, wird das Konstruktions-Script angezeigt, das auf die neuen Maßstabwerte der Plattform angewendet wird.
Aus dem Inhaltsbrowser, ziehe eine Instanz Ihrer Plattform in dein Level oder in Zimmer 1, wenn du unserem bereitgestellten Level folgst. Stelle für dieses Tutorial sicher, dass du auch eine Instanz von BP_Switch und BP_Cube im folgenden Level hast:
Mit Logik bauen
Wenn ein Objekt den Schalter überlappt, sollte sich die Plattform zwischen zwei Orten hin und her bewegen. Bevor du mit dem Erstellen beginnst, entwerfen wir die Logik, die diese Interaktion ermöglicht, indem wir die folgenden Fragen beantworten: Was muss wem passieren – und wann?
Hier ist eine Aufschlüsselung der Logik der Plattform:
Wenn BP_Plattform aktiv ist, dann:
Wenn
BP_Plattforman seinem Startort ist, gehe vorwärts zu seinem Endstandort und warte 2 Sekunden.Wenn
BP_Plattforman seinem Endstandort ist, gehe rückwärts zu seinemStartort und warte 2 Sekunden.
Wenn BP_Plattform nicht aktiv ist, hält BP_Plattforman.
Diese Zeit soll dem Spieler Zeit erlauben, auf die Plattform zu holen (oder etwas darauf zu pushen). Du kannst die Wartezeit je nach gewünschtem Schwierigkeitsgrad dieser Gameplay-Aufgabe skalieren. Später in diesem Tutorial verwendest du Zeit, um die Geschwindigkeit der Plattform einzustellen, was sich auch auf den Schwierigkeitsgrad auswirken kann.
Da du BP_Plattform bereits erstellt hast, benötigst du einen Booleschen Wert, um zu bestimmen, ob es aktiv oder inaktiv ist.
Um einen Booleschen Wert zu erstellen, führe die folgenden Schritte aus:
Im Tab Mein Blueprint von
BP_Plattformklickst du auf die Schaltfläche +, um eine neue Variable zu erstellen und sieAktivzu benennen.Stelle den Pin-Typ auf Boolescher Wert ein und klicke auf das Augensymbol so, dass es offen ist.
Im Details-Panel änderst du die Kategorie auf
Einstellen.Kompiliere deinen Blueprint und überprüfe, ob der Standardwert von Aktiv ein Häkchen hat (true).
Als Nächstes definierst du die Standorte, zwischen denen sich die Plattform bewegen soll.
Standorte definieren
Deine entworfene Logik besagt, dass die Plattform zwei Standorte benötigt:
Startposition
Endstandort
Um Ihre Arbeit modular zu halten, definieren Sie den Startort, indem Sie auf die Instanz der Plattform verweisen. Du definierst den Endstandort durch verweisen auf einen Zielpunkt-Actor.
Ein Zielpunkt ist ein nicht rendernder Actor, der über Koordinatendaten verfügt. Du könntest Zielpunkte als Spawnpunkte verwenden, um Animationspfade festzulegen, KI-Bewegungen zu steuern oder die Ausrichtung von Gelenken in IK-Rigs zu steuern.
Du benötigst außerdem Vektoren, um die Koordinatendaten der Plattforminstanz und des Zielpunkt-Actors zu speichern und innerhalb von BP_Plattform zu implementieren:
Variablenname | Typ | Erklärung |
StartLocation | Vektor | Speichere die Koordinaten von BP_Platform. |
EndLocation | Vektor | Speichere die Koordinaten des Zielpunkt-Actors. |
TargetPoint | TargetPoint | Der Zielpunkt-Actor, der deinen Endstandort im Level angibt. |
Um deine Variablen einzurichten, führe die folgenden Schritte aus:
Im Tab Mein Blueprint klicke auf das Tab + zweimal, um zwei neue Variablen zu erstellen.
Benenne die Variablen
StartLocationundEndLocation.Stelle die Pin-Typen auf Vektor ein.
Erstelle eine Variable namens
Zielpunktund stelle den Pin-Typ auf Zielpunkt (Objektreferenz). Dieser Variablentyp wird verwendet, um Zielpunkt-Actors innerhalb von Blueprints zu referenzieren.Wenn die
Zielpunkt-Variable ausgewählt ist, navigieren Sie zum Details-Panel. Ändere die Kategorie aufSetupund füge ein Häkchen in das Kontrollkästchen für Instanz editierbar hinzu.
Ihre Variablenliste sollte nun so aussehen:
Nachdem Sie Ihre Variablen erstellt haben, können Sie Logik hinzufügen:
Navigieren Sie zum Event-Diagramm und löschen Sie die Knoten Event ActorBeginOverlap und Event Tick. Du wirst sie nicht brauchen. Behalten Sie das Event BeginPlay.
Aus dem Exec-Pin des Event BeginPlay-Knotens, ziehe und erstelle StartLocation einstellen.
Aus dem Startort-Pin, ziehe und erstelle Standort des Actors holen. Überprüfen Sie, ob das Ziel-Feld aufSelbst ist.
Aus dem Exec-Pin von StartLocation einstellen, ziehe und erstelle EndLocation einstellen.
Aus dem Endstandortvektor-Pin, ziehe und erstelle Standort des Actors holen.
Aus dem Ziel-Pin von Actorstandort holen, ziehe und erstelle TargetPoint holen.
Speichern und Kompilieren.
Ihr Event-Diagramm sollte jetzt so aussehen:
Jetzt können Sie in Ihrem Level einen Zielpunkt-Actor erstellen, auf den der Blueprint verweisen kann:
Klicke in der Haupt-Symbolleiste des Editors auf die Hinzufügen-Schaltfläche.
Suche nach Zielpunkt und wähle es aus, um eines in deinem Level zu erstellen.
Verschieben Sie den Zielpunkt dorthin, wo die Plattform enden soll. Um dem Beispiellevel zu folgen, setzen Sie den Zielpunkt Standort auf
-6200,570,-5,5(unten im Raum 1).Wähle im Viewport die Instanz von
BP_Platformund verschiebe diese an die Position der Plattform, von wo aus sie starten soll.Wenn
BP_Plattformausgewählt ist, suchst du in derEinstellen-Sektion desDetails-Panel neben Zielpunkt nach der Instanz von Zielpunkt in deinem Level (oder verwendest du die Pipette, um sie im Viewport auszuwählen).
Als Nächstes erstellst du die Bewegung der Plattform.
Bewegung aufbauen
Ihre entworfene Logik erfordert, dass sich die Plattform in vier Richtungen bewegt:
Nach vorn verschieben
Wait
Nach hinten verschieben
Stoppen
Um die Events nach vorne oder nach hinten zu signalisieren oder zu stoppen, erstelle benutzerdefinierte Events. Das Warten-Event kann später mit einer Variable erstellt werden.
Um benutzerdefinierte Events zu erstellen, gehe folgendermaßen vor:
Im von der
BP_Plattformbesessenen Event-Diagramm, klicke mit der rechten Maustaste und erstelle Benutzerdefiniertes Event hinzufügen.Benenne den neuen Knoten
evMoveForward. Das Event sollte unter dem Event-Diagramm-Titel im Mein Blueprint-Tab erscheinen.Erstelle zwei weitere benutzerdefinierte Events. Benenne sie
evMoveBackwardundevStop.Da die Plattform sich nur bewegen soll, wenn der
AktivBoolescher Wert true ist, ziehe aus dem Exec-Pin auf demEndposition festlegen-Knoten und erstelle einen Verzweigung-Knoten.Auf dem Verzweigung-Knoten, ziehe aus dem Zustand-Pin und erstelle Aktiv holen.
Aus dem True-Pin des Verzweigung-Knotens, ziehe und erstelle EvMoveForward, um dieses Event auszulösen.
Speichern und Kompilieren.
Ihr Event-Diagramm sollte jetzt so aussehen:
Wenn Sie Ihre Plattform im PIE-Modus testen, wird die Plattform nichts tun. Der Grund dafür ist, dass benutzerdefiniert Events nur ein Event signalisieren; sie benötigen weitere Logik, um die Bewegung der Plattform zu beschreiben.
Vorwärtsbewegung schaffen
Um deine benutzerdefinierten Events zu unterstützen, verwendest du einen Zeitleiste-Knoten. Innerhalb einer Zeitleiste können Sie zwei Keyframes erstellen, die die Start- und Endpositionen der Plattform darstellen.
Um eine Zeitleiste zu erstellen, gehe folgendermaßen vor:
Klicke mit der rechten Maustaste in das Event-Diagramm, suche und erstelle Zeitleiste hinzufügen.
Stelle sicher, dass Sie „Zeitleistenkomponente hinzufügen“ nicht auswählen.
Benenne den Zeitleistenknoten
TM_MovePlatform.Beim Erstellen des Zeitleistenknotens erscheint eine TM_MovePlatform-Referenz in der Komponenten-Liste des Mein Blueprint-Panels. Ähnlich wie bei anderen Komponenten können Sie diese Referenz im Diagramm verwenden, um seine Eigenschaften abzurufen oder festzulegen.
Verbinde den Exec-Pin von evMoveForward mit dem Spielen-Pin von TM_MovePlatform.
Verbinde den Exec-Pin von evStop mit dem Stoppen-Pin von TM_MovePlatform.
Verbinde den Exec-Pin von evMoveBackward mit dem Umgekehrt-Pin.
Doppelklicke auf TM_MovePlatform zum Öffnen des Zeitleisten-Editors. Deine Zeitleiste ist derzeit leer, also drücke die Track-Schaltfläche und wähle Float-Track als Track-Typ.
Benenne diesen neuen Track
Alpha.Stelle die Länge des Tracks auf
1,00ein. Dies ist die Anzahl der Sekunden, die die Zeitleiste von Anfang bis Ende abspielt.Um einen Keyframe hinzuzufügen, klicke mit der rechten Maustaste in die Zeitleiste und wähle Schlüssel zu CurveFloat_0 hinzufügen.
Stelle die Zeit und den Wert des Keyframes auf
0,0ein.Klicke mit der rechten Maustaste auf den Schlüssel und ändere di eTasteninterpolation auf Auto. Dadurch wird den Kurven des Diagramms eine Beschleunigung hinzugefügt, wodurch sich Ihre Plattform zu Beginn und am Ende ihrer Bewegung langsamer bewegt.
Füge einen zweiten Keyframe hinzu, aber setze die Zeit und den Wert auf
1.0und lege die Tasteninterpolation auf Auto.Speichern und Kompilieren.
Ihre Timeline sollte jetzt folgendermaßen aussehen:
Um Bewegung zu erzeugen, weisen Sie die Plattform an, sich für jeden Spielrahmen schrittweise eine neue Position entlang eines linearen Pfads zwischen der Start- und Endposition festzulegen. Wenn Sie mit Animationssoftware vertraut sind, können Sie sich dies als Tweening vorstellen. Dazu verwendest du einen Lineare Interpolation-Knoten.
Lineare Interpolation-Knoten verwenden ein Alpha, wie das, das Sie in TM_MovePlatform erstellen, um schrittweise zwischen zwei Werten zu mischen. Du kannst lineare Interpolationen verwenden, um Farben, Materialien oder in diesem Fall Standorte zu interpolieren.
Um eine lineare Interpolation zu erstellen und es mit Ihrer vorhandenen Logik zu verbinden, führe die folgenden Schritte aus:
Gehe zurück zum Event-Diagramm-Tab. Ziehe vom Aktualisieren-Pin von TM_MovePlatform und erstelle Welt-Standort festlegen (Plattform).
Aus dem Neuer Standort-Pin von Welt-Standort festlegen, ziehe und erstelle Lineare Interpolation (Vektor).
Aus dem A-Pin des Lineare Interpolation-Knotens, ziehe heraus und erstelle StartLocation holen.
Aus dem B-Pin des Lineare Interpolation-Knotens, ziehe und erstelle EndLocation holen.
Um das Alpha zu nutzen, das du in TM_MovePlatform erstellt hast, verbinde den Alpha-Pin von TM_MovePlatform mit dem Alpha-Pin der Linearen Interpolation.
Speichern, Kompilieren und schließe den Blueprint-Editor.
Ihr Event-Diagramm sollte jetzt so aussehen:
Jetzt verfügst du über genügend Logik, um deine Plattform zu testen. Klicke in der Haupt-Symbolleiste des Editors auf die Spielen-Schaltfläche, um in den PIE-Modus zu wechseln. Zur Laufzeit sollte Ihre Plattform zum Endstandort verschoben werden. Die Plattform bewegt sich derzeit schnell, daher kann es schwierig sein, sie zu beobachten. Als Nächstes fügst du eine Rückwärtsbewegung hinzu, sodass sich die Plattform bei Aktivität kontinuierlich bewegt. Später fügst du eine Variable hinzu, um es zu verlangsamen.
Du kannst experimentieren, indem du den Zielpunkt auf Ihr Level verschiebst, um die Wirkung zu sehen.
Die von Ihnen erstellte Zeitleiste ist eine Sekunde lang, sodass die Plattform immer eine Sekunde braucht, um von ihrem Startort zum Zielpunkt zu gelangen. Je weiter du die Plattform vom Zielpunkt entfernt platzierst, desto schneller muss sie sich bewegen, um diese Distanz zurückzulegen.
Bisher bewegt sich die Plattform nur in eine Richtung. Als Nächstes baust die Rückwärtsbewegung auf.
Rückwärtsbewegung erzeugen
Um die Bewegung der Plattform umzukehren, benötigst du eine Logik, die prüft, in welche Richtung sich ihre Zeitleiste bewegt. Wenn sie sich nach vorwärts bewegt, sollte die Logik evMoveBackwards aufrufen. Wenn es sich nicht nach vorwärts bewegt, sollte die Logik evMoveForward aufrufen. Du kannst einen Verzweigung-Knoten verwenden, um diese Prüfung durchzuführen.
Um einen Verzweigungsknoten zu erstellen und ihn mit Ihrer vorhandenen Logik zu verbinden, führe die folgenden Schritte aus:
Aus dem Beendet-Pin von TM_MovePlatform, ziehe und erstelle einen Verzweigung-Knoten.
Aus dem Zustand-Pin der Verzweigung, ziehe und erstelle Gleich (Enum).
Verbinde den Richtung-Pin von TM_MovePlatform mit dem A-Pin von Gleich.
Überprüfe, ob die Bedingung auf Nach vorne eingestellt ist.
Aus dem True-Pin der Verzweigung, ziehe und erstelle evMoveBackwards.
Aus dem False-Pin der Verzweigung, ziehe und erstelle evMoveForward.
Da du nur dann eine Bewegung wünschst, wenn der
AktivBoolescher Wert true ist, überprüfe dies zuerst mit einer anderen Verzweigung:Um einen neuen Knoten zwischen TM_MovePlatform und dem Verzweigung-Knoten hinzuzufügen, ziehe vom Beendet-Pin und füge einen neuen Verzweigung-Knoten hinzu. Dadurch bleiben die bestehenden Verbindungen erhalten und der zweite Verzweigung-Knoten wird dazwischen eingefügt.
Aus dem Zustand-Pin auf dem neuen Verzweigung-Knoten, ziehe und erstelle Aktiv holen.
Speichern und Kompilieren.
Ihr Event-Diagramm sollte jetzt so aussehen:
In Ihrem Logikentwurf heißt es jedoch, dass die Plattform eine gewisse Zeit warten muss, bevor sie die Richtung ändert. Als Nächstes erstellst du diese Verzögerung.
Erstellen einer Verzögerung
Du kannst einen Verzögerungsknoten verwenden, um die Plattform anzuweisen, zu warten, und eine Variable vom Typ Float, um die gewünschte Wartezeit festzulegen.
Um einen Verzögerungsknoten und einen Float zu erstellen, gehe folgendermaßen vor:
Im Tab Mein Blueprint von
BP_Plattformklicke auf die Schaltfläche +, um eine neue Variable zu erstellen und sieWaitDurationzu benennen.Stelle seinen Pin-Typ auf Float ein.
Im Details-Panel, fügst du es zur Einstellen-Kategorie hinzu und aktivierst Instanz editierbar.
Kompiliere, um auf den Standardwert der Variable zuzugreifen, und lege diesen auf
2Sekunden fest. Dies ist die Zeit, die wir auf dem Beispiellevel verwenden.Um die Verzögerung hinzuzufügen, bevor die Plattform die Richtung ändert, ziehe vom Beendet-Pin auf TM_MovePlatform und erstelle einen Verzögerung-Knoten.
Aus dem Dauer-Pin von Verzögerung, ziehe und erstelle Wartezeit holen.
Speichern und Kompilieren.
Ihre Variablenliste sollte nun so aussehen:
Ihr Event-Diagramm sollte jetzt so aussehen:
Teste deine Plattform im PIE-Modus. Es sollte sich vorwärts bewegen, warten, dann rückwärts bewegen, warten und dies endlos wiederholen.
Abschließend musst du deine Plattform überBP_Switch aktivieren.
Verbinde den Switch mit der Plattform
Die Plattform darf sich nur bewegen, wenn BP_Switch durch einen Spieler oder ein anderes Objekt aktiviert wird. Du verwendest die Blueprint-Interfacenfunktionen, die du in Rätsel: Schalter und Würfel und deiner Boolesche Variable Aktiv erstellt hast, um zu signalisieren, wann die Plattform vorwärts fahren und anhalten soll.
Um den SchalterBPI_Interaktion Um die Bewegung der Plattform zu starten und zu stoppen, gehe folgendermaßen vor:
In
BP_Plattformklicke in der Menüleiste des Blueprint-Editors aufKlasseneinstellungen.Im Details-Panel unter dem Interfaces -Titel, klicke auf das Dropdown-Menü neben Implementierte Interfaces. Suche und füge BPI_Interaktion hinzu.
Dadurch entsteht ein neuer Interfaces-Titel auf dem Mein Blueprint-Tab.
Rechtsklicke im Interfaces-Tab auf fnBPISwitchOn und wähle Event implementieren aus, um es als ein Event in den Event-Diagramm zu bevölkern.
Mache dasselbe für fnBPISwitchOff.
Aus dem Exec-Pin von fnBPISwitchOn, suche und erstelle Als aktiv einstellen. Aktiviere das Kontrollkästchen neben Aktiv, um seinen Wert auf True zu setzen.
Aus dem Exec-Pin des Einstellen-Knotens, suchen und erstelle EvMoveForward.
Aus dem Exec-Pin von fnBPISwitchOff, suche und erstelleAls aktiv einstellen.
Aus dem Exec-Pin des Einstellen-Knotens, suche und erstelle EvStop.
Speichern und Kompilieren.
Alle Logik, die BP_platform antreibt, ist abgeschlossen. Nachdem du die Schwerstarbeit erledigt hast, kannst du ändern, welche Plattform(en) ein Schalter aktiviert, wohin und woher die Plattform fährt und die Skalierung der Plattformen – alles vom Viewport aus. Da diese Einstellungen direkt im Viewport verfügbar sind, kannst du dein Level entwerfen und testen, ohne die Blueprints ständig bearbeiten zu müssen.
Als nächstes bevölkerst du das Array des Schalters, das du in Rätsel: Schalter und Würfel erstellt hast.
Bevölkern der Interact-Objektliste
Du kannst das Interact Object List-Array des Schalters mit jedem Objekt in deinem Level bevölkern, das der Schalter aktivieren soll, solange es über eine Logik zur Stromversorgung verfügt. In diesem Fall wählst du die Instanz von BP_Plattform auf deinem Level.
Um das Array zu bevölkern, führe die folgenden Schritte aus:
Wähle Ihre Plattform im Viewport aus. Setze im Details-Panels Aktiv auf False (unabgehakt). Dadurch wird die Aktivierung zur Laufzeit verhindert und auf das Signal des Schalters gewartet.
Wähle Ihren Schalter im Viewport aus. Klicke im Details-Panel unter Setup neben Objektliste interagieren auf Element hinzufügen (+), um einen neuen Index im Array zu erstellen.
Suche in der Dropdown-Liste nach
BP_Plattformoder verwende die Pipette, um es im Viewport auszuwählen.
Wechsele in den PIE-Modus, um Ihr endgültiges Gameplay-Objekt zu testen. Wenn du oder ein Physikwürfel den Schalter überlappen, sollte sich die Plattform vor und zurück bewegen (und anhalten, wenn du oder der Würfel sich wegbewegen).
Versuche, ActivateOnce auf dem BP_Switch zu aktivieren. Du wirst feststellen, dass sich die Plattform weiter bewegt, auch wenn du dich vom Schalter entfernen, da der Schalter aktiv bleibt.
Je nachdem, wo du den Zielpunkt in deinem Level platziert hast, stellst du möglicherweise ein Problem fest. Wenn man den Physikwürfel auf die Plattform stellt und auf den Schalter tritt, bewegt sich die Plattform so schnell, dass der Würfel herunterfällt. Unpraktische Physik kann Spieler frustrieren und sie daran hindern, Ihr Rätsel zu vervollständigen.
In der nächsten Sektion wirst du dieses Problem debuggen.
Debugging
In dieser Sektion nimmst du Anpassungen vor und fügen deinem Physikwürfel und Ihrer Plattform zusätzliche Funktionen hinzu, um Probleme zu vermeiden, die bei deinem Spielern beim Lösen deines Rätsels zu Frustration führen könnten.
Dämpfung einstellen
Wenn du den Würfel schiebst, wirst du möglicherweise feststellen, dass er sich sehr leicht anfühlt und sich einfach schieben lässt. Diese Kraftempfindlichkeit kann zu Problemen führen, wenn Spieler den Würfel durch ein Rätsel manövrieren oder wenn er sich auf einer Plattform bewegt.
Um die Dämpfung auf dem Würfel zu erhöhen, führe die folgenden Schritte aus:
Öffne
BP_Cubeim Blueprint-Editor und wähle das Würfel statische Mesh aus.Im Details-Panel, unter Physik lege die Lineare Dämpfung
0,7und Winkeldämpfung auf0,8fest. Dies ist ein empfohlener Betrag und kann je nach den Anforderungen Ihres Projekts variieren.Speichern und Kompilieren.
Teste den Würfel erneut. Wenn es immer noch von der Plattform fällt, fahre mit der Anpassung der Geschwindigkeit der Plattform fort.
Anpassen der Geschwindigkeit
Da die Geschwindigkeit der Plattform den Physikwürfel beeinflusst, kann eine Verlangsamung der Plattformgeschwindigkeit dazu beitragen, dass der Würfel an Bord bleibt.
Um die Geschwindigkeit der Plattform anzupassen, befolge diese Schritte.
Im von der
BP_Plattformbesessenen Event-Diagramm erstelle eine neue Variable mit dem NamenTimeToTarget.Stelle seinen Pin-Typ auf Float ein.
Kompiliere dein Blueprint.
Im Details-Panel, aktivierst du Instanz editierbar, fügst du es der Einstellen-Kategorie hinzu und legst den Standardwert auf
2.0. Dies ist ein empfohlener Betrag, der je nach Ihrem Level variiert.Gehe zu der Gruppe von Knoten oben in Ihrem Diagramm, die mit Event BeginPlay anfängt.
Ziehe aus dem Exec-Pin des Endposition festlegen-Knotens. Suche und erstelle Spielrate festlegen (Zeitleiste).
Möglicherweise musst du das Häkchen von Kontextsensitiv entfernen, um diesen Knoten zu finden.
Aus dem Ziel-Pin des Spielrae festlegen-Knotens, suche und erstelle einen TM Move-Plattform holen-Knoten.
Aus dem Neue Rate-Pin von Spielerate festlegen, ziehe und erstelle einen Teilen-Operatorknoten. Stelle seinen A-Wert auf
1.0ein.Aus dem B-Pin des Teilen-Knotens, ziehe und erstelle TimeToTarget holen.
Speichern und Kompilieren.
Ihr Event-Diagramm sollte jetzt so aussehen:
Teste dein Level im PIE-Modus und sehe, wie sich dadurch die Interaktion zwischen der Plattform und dem Würfel verändert. Der Würfel sollte jetzt beim Bewegen auf der Plattform bleiben.
Weil Sie die TimeToTarget-Variable in der Kategorie Setup eingeschlossen haben, können Sie die Geschwindigkeit der Plattform einfach anpassen und sie vom Viewport aus testen, während Sie Ihr Level entwerfen.
Beispiel-Rätsel
Wir haben mit dem in diesem Tutorial beschriebenen Schalter, Würfel, der Plattform und den Schlüssel-Assets ein Rätsel für Raum 1 erstellt. Wenn du unser Rätsel kopieren möchtest, anstatt dein eigenes zu erstellen, wird in den folgende Sektionen beschrieben, wie du die Assets genau dort platzierest, wo wir sie platziert haben. Jede Sektion hebt eine Erkenntnis hervor, die wir während des Testspielens gewonnen haben und die unsere Designentscheidungen beeinflusst hat.
Um unser Rätsel zu kopieren, müssen Ihre Blueprints wie folgt benannt werden:
BP_Switch
BP_Cube
BP_Platform
BP_Key
Wenn du deine Assets nicht gemäß diesem Tutorial erstellt hast, wird das Snippet möglicherweise nicht wie erwartet kopiert.
Die Hindernisse, Würfel und der Schlüssel
Während des Spieltests stellten wir fest, dass die Spieler Schwierigkeiten hatten, die Bewegung des Physikwürfels zu kontrollieren. Wir haben Wände hinzugefügt, um den Würfel zu führen, während der Spieler ihn durch den Raum schiebt, und eine Dämpfung, um die Reaktivität des Würfels zu verringern. Dies mindert Frustration und vermeidet eine unfaire Bestrafung des Spielers für ungewöhnliches Physikverhalten.
Wir stellten außerdem fest, dass wir eine Möglichkeit brauchten, unser Rätsel zurückzusetzen, wenn der Spieler einen Fehler machte. Da es wahrscheinlich ist, dass Spieler Würfel von Plattformen werfen, während sie Spielen, haben wir wichtige Orte mit mehr Würfeln bevölkert, um das Zurücksetzen der Würfel zum Zurücksetzen des Rätsel und zum Ersetzen zerstörter Würfel zu verringern.
Raum 1 Entwicklungssequenz
Um die Hindernisse in Ihr Level zu kopieren, gehe folgendermaßen vor:
Kopiere das folgende Snippet, indem du auf Vollständigen Snippet kopieren klickst.
Command LineBefehlszeilen-SnippetBegin Map Begin Level Begin Actor Class=/Script/Engine.StaticMeshActor Name=StaticMeshActor_32 Archetype="/Script/Engine.StaticMeshActor'/Script/Engine.Default__StaticMeshActor'" ExportPath="/Script/Engine.StaticMeshActor'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_32'" Begin Object Class=/Script/Engine.StaticMeshComponent Name="StaticMeshComponent0" Archetype="/Script/Engine.StaticMeshComponent'/Script/Engine.Default__StaticMeshActor:StaticMeshComponent0'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_32.StaticMeshComponent0'" End Object Begin Object Name="StaticMeshComponent0" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_32.StaticMeshComponent0'" StaticMesh="/Script/Engine.StaticMesh'/Game/LevelPrototyping/Meshes/SM_Cube.SM_Cube'" StaticMeshImportVersion=1 StaticMeshDerivedDataKey="STATICMESH_FD1BFC73B5510AD60DFC65F62C1E933E_228332BAE0224DD294E232B87D83948FQuadricMeshReduction_V2$2e1_6D3AF6A2$2d5FD0$2d469B$2dB0D8$2dB6D9979EE5D2_CONSTRAINED0_100100000000000000000000000100000000000080FFFFFFFFFFFFFFFFFFFFFFFF000000000000803F00000000000000803F0000803F00000000000000003D19FC1626C9B248DECA64C7201D34D790CF7B09D3C0873700000000010000000100000000000000010000000100000000000000000000000100000001000000400000000000000001000000000000000000F03F000000000000F03F000000000000F03F0000803F00000000050000004E6F6E65000C00000030000000803FFFFFFFFF0000803FFFFFFFFF0000000000000041000000000000A0420303030000000000000000_RT00_0" RelativeLocation=(X=-5940.000136,Y=1669.999995,Z=-400.499900)Klicke im Unreal Editor auf Bearbeiten > Einfügen oderStrg + V im Viewport.
Die Plattformen
So wie das Hinzufügen weiterer Physikwürfel als Rätsel-Reset fungierte, haben wir eine Plattform hinzugefügt, die den Spieler zurück in die Ausgangsposition des Raums hebt. Mithilfe der Aktiv-Variable, aktiviert sich diese Reset-Plattform zur Laufzeit.
Um die Hindernisse in Ihr Level zu kopieren, gehe folgendermaßen vor:
Kopiere das folgende Snippet, indem du auf Vollständigen Snippet kopieren klickst.
Command LineBefehlszeilen-SnippetBegin Map Begin Level Begin Actor Class=/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C Name=BP_MovingPlatform_C_16 Archetype="/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C'/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.Default__BP_Platform_C'" ExportPath="/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16'" Begin Object Class=/Script/Engine.SceneComponent Name="DefaultSceneRoot" Archetype="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C:DefaultSceneRoot_GEN_VARIABLE'" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.DefaultSceneRoot'" End Object Begin Object Class=/Script/Engine.StaticMeshComponent Name="Platform" Archetype="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C:Platform_GEN_VARIABLE'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.Platform'" End Object Begin Object Class=/Script/Engine.TimelineComponent Name="TM_MovePlatform" ExportPath="/Script/Engine.TimelineComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.TM_MovePlatform'" End Object Begin Object Name="DefaultSceneRoot" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.DefaultSceneRoot'"Klicke im Unreal Editor auf Bearbeiten > Einfügen oderStrg + V im Viewport.
Verbinde die Plattformen mit dem entsprechenden Zielpunkt:
BP_Platform1verweist auf TargetPoint1BP_Platform2verweist auf TargetPoint2BP_Platform3verweist auf TargetPoint3BP_Platform4verweist auf TargetPoint4BP_Platform5verweist auf TargetPoint5
Die Schalter
Wir haben das InteractObjectList-Array verwendet, um einige Schalter mit mehreren Plattformen zu verbinden. Auf diese Weise haben wir das Rätsel prägnant und herausfordernd gehalten und zusätzliche Schritte vermieden, die den Spieler langweilen oder frustrieren könnten.
Um die Hindernisse in Ihr Level zu kopieren, gehe folgendermaßen vor:
Kopiere das folgende Snippet, indem du auf Vollständigen Snippet kopieren klickst.
Command LineBefehlszeilen-SnippetBegin Map Begin Level Begin Actor Class=/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C Name=BP_ActivationPlate_C_9 Archetype="/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.Default__BP_Switch_C'" ExportPath="/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9'" Begin Object Class=/Script/Engine.SceneComponent Name="DefaultSceneRoot" Archetype="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C:DefaultSceneRoot_GEN_VARIABLE'" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.DefaultSceneRoot'" End Object Begin Object Class=/Script/Engine.StaticMeshComponent Name="Switch" Archetype="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C:Switch_GEN_VARIABLE'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.Switch'" End Object Begin Object Class=/Script/Engine.BoxComponent Name="Trigger" Archetype="/Script/Engine.BoxComponent'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C:Trigger_GEN_VARIABLE'" ExportPath="/Script/Engine.BoxComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.Trigger'" End Object Begin Object Name="DefaultSceneRoot" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.DefaultSceneRoot'"Klicke im Unreal Editor auf Bearbeiten > Einfügen oderStrg + V im Viewport.
Verbinde jeden Switch mit der richtigen Plattform:
BP_Switch1verweist aufBP_Platform1.BP_Switch2verweist aufBP_Platform2undBP_Platform 3.BP_Switch3verweist aufBP_Platform5.
Teste jetzt dein Level, um sicherzustellen, dass es richtig funktioniert, und sehe, ob du das Rätsel lösen konntest. Du kannst deine Arbeit mit dem vollständigen Level vergleichen, das wir am Ende dieser Tutorialreihe bereitstellen.