Einrichten des Levels
Als Erstes initialisierst du ein neues Projekt über die Inselvorlage Fall Guys – Start. Diese Startinsel enthält einen einsatzbereiten Kurs, durch den du navigieren kannst und den du in diesem Tutorial mit Bewegung anpassen wirst.
Definieren von sich bewegenden Props
Bevor du damit beginnen kannst, deine Props zu bewegen, musst du definieren, was ein bewegliches Prop ist. Du kannst ein Prop mit einem Verse-Gerät direkt bewegen, aber das kann problematisch werden, wenn du mehrere Props gleichzeitig bewegen möchtest. Stattdessen definierst du eine abstrakte movable_prop-Klasse. Diese enthält das Prop, das du bewegen möchtest, und verschiedene andere Werte, mit denen du die Logik und das Timing der Bewegung anpasst.
Folge den Schritten unten, um dein bewegliches Prop zu definieren:
Erstelle mit dem Verse-Explorer eine neue Verse-Klasse mit der Bezeichnung
movable_prop. Da es sich um eine Verse-Klasse und nicht um ein Gerät handelt, erstelle diese Datei mit Leer erstellen. Da es sich um eine abstrakte Klasse handeln wird, für die du Subklassen verschiedener beweglicher Prop-Arten erstellen wirst, fügst du den Bezeichner<abstract>zu dieser Klasse hinzu. Informationen dazu, wie du in Verse eine neue Klasse erstellst, findest du unter Dein erstes Programm in Verse ändern und ausführen.Verse# Defines a Creative prop that moves to a target or location using animation. movable_prop<public> := class<abstract>():Füge die Importpfade
using { /Fortnite.com/Devices },using { /Verse.org/Simulation }undusing { /UnrealEngine.com/Temporary/SpatialMath }oben in der Datei hinzu. Du musst diese Module importieren, damit sie die Mathematik für die Bewegung deiner Props verarbeiten.Jedes der Felder in dieser Klasse enthält auch einen
ToolTip. Das Hinzufügen einerToolTip-Meldung zu deinen bearbeitbaren Feldern zeigt einen Tooltipp an, wenn du mit der Maus in UEFN auf das Feld zeigst. Alle in dieser Klasse verwendeten Tooltipps sind unten aufgeführt. Du kannst diese Tooltipps kopieren und einfügen oder eigene definieren.Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MoveDurationTip<localizes>:message = "The amount of time the prop takes to move to its destination." MoveEaseTypeTip<localizes>:message = "The animation easing applied to the movement." MoveEndDelayTip<localizes>:message = "The delay after the movement finishes." MoveOnceAndStopTip<localizes>:message = "Whether the RootProp should stop in place after it finishes moving." MoveStartDelayTip<localizes>:message = "The delay before the movement starts." MoveTargetsTip<localizes>:message = "The array of CreativeProp to move toward. These targets can be children of the RootProp."Definiere die Felder, die jedes bewegliche Prop benötigt. Füge die folgenden Felder zu deiner Klassendefinition für
movable_prophinzu:Ein bearbeitbares
creative_propmit der BezeichnungRootProp. Dies ist das Kreativmodus-Prop, das du im Gameplay herumbewegst.Verse# The Creative prop associated with this class. # This should be the root prop of the object you want to move. @editable {ToolTip := RootPropTip} RootProp:creative_prop = creative_prop{}Ein bearbeitbarer
floatmit der BezeichnungMoveDuration. Dies ist der Betrag der Zeit, die das Prop benötigt, um sein Ziel zu erreichen.Verse# The duration in seconds it takes for the prop to move to its destination. @editable {ToolTip := MoveDurationTip} MoveDuration:float = 3.0Ein bearbeitbarer
floatmit der BezeichnungMoveStartDelay. Dies ist die Zeit in Sekunden, die das Prop vor der Bewegung wartet.Verse# The duration in seconds to wait before movement begins. @editable {ToolTip := MoveStartDelayTip} MoveStartDelay:float = 0.0Ein bearbeitbarer
floatmit der BezeichnungMoveEndDelay. Dies ist die Zeit in Sekunden, die das Prop nach der Bewegung wartet.Verse# The duration in seconds to wait after movement ends. @editable {ToolTip := MoveEndDelayTip} MoveEndDelay:float = 0.0Eine bearbeitbare
logicmit der BezeichnungMoveOnceAndStop. Diese steuert, ob dein Prop sich nur einmal bewegt oder die Bewegung nach dem Abschluss wiederholt.Verse# Whether the RootProp should stop in place when it finishes moving. @editable {ToolTip := MoveOnceAndStopTip} MoveOnceAndStop:logic = falseEine bearbeitbare
logicmit der BezeichnungShouldReset. Diese steuert, ob dein Prop auf seine ursprüngliche Position zurückgesetzt wird, nachdem es die Bewegung abgeschlossen hat.Verse# Whether the RootProp should reset back to the starting position when it # finishes moving. @editable {ToolTip := ShouldResetTip} ShouldReset:logic = falseEine transform-Variable mit dem Namen
StartingTransform. Dies ist die Transformation, an der sich dasRootPropbefindet, wenn es die Bewegung beginnt.Verse# The starting transform of the RootProp. var StartingTransform:transform = transform{}
Deine endgültige Klassendefinition sollte wie folgt aussehen:
Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MoveDurationTip<localizes>:message = "The amount of time in seconds the prop takes to move to its destination." MoveEaseTypeTip<localizes>:message = "The animation easing applied to the movement." MoveEndDelayTip<localizes>:message = "The delay after the movement finishes." MoveOnceAndStopTip<localizes>:message = "Whether the RootProp should stop in place after it finishes moving." MoveStartDelayTip<localizes>:message = "The delay before the movement starts."Bevor sich dein Prop bewegt, muss es wissen, wohin es sich bewegt. Dazu definierst du eine neue Funktion, um die
StartingTransformvor der Bewegung festzulegen:Füge eine neue Methode
SetStartingTransform()zu deiner Klassendefinitionmovable_prophinzu.Setze in
SetStartingTransform()dieStartingTransformauf die Transformation vonRootPropmitGetTransform().Deine vollständige
SetStartingTransform()-Funktion sollte wie folgt aussehen:Verse# Sets the StartingTransform to the current transform of the RootProp. SetStartingTransform():void= set StartingTransform = RootProp.GetTransform()
Um die Bewegung deines Prop zu starten, definierst du eine neue
Move()-Funktion:Füge eine neue Methode
Move()zu deiner Klassendefinitionmovable_prophinzu.Füge den
<suspends>-Modifikator zu dieser Funktion hinzu, damit sie asynchron ausgeführt werden kann. Da dies die Basisklassenversion dieser Funktion ist und nicht verwendet wird, kann sofortreturnverwendet werden.Deine komplette
Move()-Funktion sollte wie folgt aussehen:Verse# Move the RootProp to its target. This is the base class # version of this function and should not be used. Move()<suspends>:void= return
Wenn du möchtest, dass dein Prop zurückgesetzt wird, wenn es die Bewegung abgeschlossen hat, musst du es zurück an seine Ausgangsposition teleportieren. Füge dazu eine neue
Reset()-Methode zu deiner Klassendefinitionmovable_prophinzu:Füge die Modifikatoren
<decides><transacts>zu dieser Funktion hinzu, damit sie rückgängig gemacht werden kann, falls das Zurücksetzen fehlschlägt. Die kann passieren, wenn dein Prop im Gameplay entsorgt wurde.Teleportiere in
Reset()dasRootPropmitTeleportTo[]zurück an seineStartingTransform.Deine vollständige
Reset()-Funktion sollte wie folgt aussehen:Verse# Reset the RootProp by teleporting it back to its Starting Transform. Reset()<decides><transacts>:void= RootProp.TeleportTo[StartingTransform]
Du hast viele Funktionen definiert. Jetzt ist es an der Zeit, sie alle miteinander zu verbinden. Füge eine neue
ManageMovement()-Methode zu deiner Klassendefinitionmovable_prophinzu, um alle verschiedenen Bewegungsfunktionen zu verwalten. Füge den Modifikator<suspends>hinzu, damit diese Funktion asynchron ausgeführt werden kann.Verse# Loops moving the RootProp to its target by calling Move(), and handles # any logic when the movement begins and ends. ManageMovement()<suspends>:void=Erstelle in
ManageMovement()einenloop-Ausdruck, der die Bewegung verwaltet. In der Schleife wirdSleep()fürMoveStartDelaySekunden ausgeführt und dann wirdMove()aufgerufen.Verse# Loops moving the RootProp to its target by calling Move(), and handles # any logic when the movement begins and ends. ManageMovement()<suspends>:void= loop: Sleep(MoveStartDelay) Move()Wenn deine Plattform die Bewegung abgeschlossen hat, muss sie weitermachen, ihre Position zurücksetzen oder an der Position stoppen. Um das Stoppen zu verarbeiten, prüfst du in einem
if-Ausdruck, obMoveOnceAndStopTrue ist. Wenn ja, unterbreche die Schleife mitbreak. Nach dem Stoppen der Bewegung wirdSleep()fürMoveEndDelaySekunden ausgeführt. Prüfe schließlich in einem anderenif-Ausdruck, obShouldResetTrue ist, und rufeReset[]auf, wenn dies der Fall ist. Deine vollständigeManageMovement()-Funktion sollte wie folgt aussehen:Verse# Loops moving the RootProp to its target by calling Move(), and handles # any logic when the movement begins and ends. ManageMovement()<suspends>:void= loop: Sleep(MoveStartDelay) Move() # If the prop should only move once and stop, then exit the loop. if:Da es in dieser Klasse keine
OnBegin()-Funktion gibt, benötigst du eine Möglichkeit, damit andere KlassenManageMovement()aufrufen können, um die Bewegung deiner Plattform zu starten. Füge eine neue FunktionSetup()zu deiner Klassendefinitionmovable_prophinzu. Rufe inSetup()zuerstSetStartingTransform()auf und spawne dann eineManageMovement()-Funktion, damit deine Plattform loslegen kann. Deine vollständigeSetup()-Funktion sollte wie folgt aussehen:Verse# Set the StartingTransform, then begin movement by spawning ManageMovement. Setup():void= SetStartingTransform() spawn{ManageMovement()}
Nun folgt
Nachdem deine abstrakte Klasse nun vollständig ist, wirst du im nächsten Schritt erfahren, wie du die Bewegung durch eine Animation erreichst.
2. Verschieben von Props mit Animationen
Erfahre, wie du dieses leistungsstarke Tool nutzen kannst, um eigene Animationen zu erstellen, damit sich deine Props bewegen.
Vollständiger Code
Dies ist der vollständige Code, der in diesem Teil erstellt wurde:
movable_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MoveDurationTip<localizes>:message = "The amount of time in seconds the prop takes to move to its destination."
MoveEaseTypeTip<localizes>:message = "The animation easing applied to the movement."
MoveEndDelayTip<localizes>:message = "The delay after the movement finishes."
MoveOnceAndStopTip<localizes>:message = "Whether the RootProp should stop in place after it finishes moving."
MoveStartDelayTip<localizes>:message = "The delay before the movement starts."