Einige der einfachsten Hindernisse bewegen sich einfach nur vor und zurück. Auf derartige Hindernisse triffst du häufig bei Plattformherausforderungen, bei denen du deine Sprünge genau abpassen und vorsichtige Bewegungen machen musst, damit du nicht fällst.
Das Bewegen einer Plattform auf diese Art wird als Verschiebung oder Ändern der Position der Transformation eines Objekts bezeichnet. In diesem Abschnitt erfährst du mehr darüber, wie du Plattformen erstellst, die sich nicht nur vor und zurück bewegen, sondern sich auch an verschiedene Punkte in der Welt bewegen können. Dann kannst du diese verwenden, um dein erstes Hindernis zu erstellen.
Erstellen von Props, die verschoben werden
Folge den nachstehenden Schritten, um den Code zu erstellen, der deine Plattformen verschiebt:
Erstelle eine neue Verse-Klasse mit dem Namen
translating_propdie vonmovable_propübernimmt, indem du Verse Explorer verwendest. Füge den Bezeichner<concrete>zu dieser Klasse hinzu, um ihre Eigenschaften in UEFN freizugeben.Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):Füge die Anweisungen
using { /Fortnite.com/Devices/CreativeAnimation }undusing { /UnrealEngine.com/Temporary/SpatialMath }oben in der Datei hinzu, um diese Module zu importieren. Du benötigst diese, um dein Prop zu animieren. Die in diesem Abschnitt verwendeten Tooltipps sind hier ebenfalls enthalten.Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget." # A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):Füge oben in der Klassendefinition von
translating_propdie folgenden Felder hinzu:Ein editable array von
creative_propmit dem NamenMoveTargets. Dies sind die Kreativmodus-Props, zu denen sich deinRootPropwährend des Gameplay bewegen wird. Indem wir ein weiteres Prop anstelle einer Transformation als Ziel verwenden, zu dem sich bewegt werden soll, ist leicht zu visualisieren, wohin sich deine Props bewegen. Später wirst du diese im Gameplay im Editor unsichtbar machen.Verse# The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{}Eine bearbeitbare optionale
vector3-Variable mit dem NamenMovePosition. Wenn du keinMoveTarget-Prop zuweist, verwendet dein Stamm-Prop dies, um zu wissen, wohin es sich bewegen soll.Verse# The position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget. @editable {ToolTip := MovePositionTip} var MovePosition:?vector3 = falseEine Variable
vector3mit dem NamenTargetPosition. Dies ist die Position, zu der sich dein Prop tatsächlich bewegen wird, und sie wird entweder auf die Position des Bewegungsziels oder aufMovePositiongesetzt.Verse# The position the prop is currently targeting. var TargetPosition:vector3 = vector3{}Deine Klassendefinition sollte folgendermaßen aussehen:
Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop): # The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{} # The optional position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget.
Da du bereits die Funktion
Move()eingerichtet hast, die dein Prop inmovable_propbewegt, kannst du sie in dieser Klasse überschreiben. Überschreibe die FunktionMove()in deiner Klassetranslating_prop.Verse# Translate toward the MovePosition, or MoveTarget if one is set. Move<override>()<suspends>:void=Prüfe in
Move()in einemif-Ausdruck, obMovePositionfestgelegt und in einemNewPosition-Wert gespeichert ist. Wenn dies der Fall ist, setzeTargetPositionaufNewPosition.Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPositionDeine
MoveToEase()-Funktion benötigt einenanimation_mode, der ihr übergeben wird. Deine Animation wird jedes Mal abgespielt, wennMove()aufgerufen wird, und deranimation_modesteuert, was passiert, wenn deine Animation endet. RufeMoveToEase()auf, umTargetPosition,MoveDuration,MoveEaseTypeundanimation_mode.OneShotzu übergeben. Wenn du diesen Animationsmodus verwendest, bedeutet dies, dass deine Animation stoppt, sobald dein Objekt sein Ziel erreicht. Dies ist die zuvor eingerichtete überladene FunktionMoveToEase(), die keine Drehung oder Skalierung akzeptiert.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once. RootProp.MoveToEase(TargetPosition, MoveDuration, MoveEaseType, animation_mode.OneShot)Der Animationsmodus one-shot ist zwar praktisch, wenn du dein Objekt zurücksetzen oder es weiter bewegen möchtest, aber was ist, wenn du es rückwärts wiedergeben möchtest? In diesem Fall kannst du den Animationsmodus
PingPongverwenden. Dieser gibt deine Animation wieder und gibt sie dann rückwärts wieder, um das Prop an seine Ausgangsposition zu bewegen. Es gibt auch den AnimationsmodusLoop, der deine Animation wiederholt, aber dafür musst du deine Animation an derselben Stelle beenden, an der sie beginnt. Wähle den richtigen Animationsmodus für die Anforderungen deines Erlebnisses.Wenn du beim Einrichten deiner Props kein
MovePositionim Editor festgelegt hast, musst du ein oder mehrereMoveTargetsfür dein Stamm-Prop festlegen, zu denen es sich bewegen soll. UmMoveTargetsin einemfor-Ausdruck zu verarbeiten, iteriere durch jedes Ziel inMoveTargets. Prüfe durch einen Aufruf vonIsValid[], obMoveTargetfestgelegt ist. Wenn dies der Fall ist, setzeTargetPositionauf die Verschiebung vonMoveTarget.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition else: for: MoveTarget:MoveTargets do: # Set the TargetPosition to the MoveTarget's position if theRufe abschließend
MoveToEase()erneut mitanimation_mode.OneShotals Animationsmodus auf. Wenn du das in einemfor-Ausdruck machst, wird dein Prop entsprechend den von dir festgelegten Parametern nacheinander zu jedem der Ziele bewegt, am Ende zurückgesetzt oder weitergeführt. Deine kompletteMove()-Funktion sollte wie folgt aussehen:Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once.
Erstellen des Verse-Geräts
Da dein Verse-Code jetzt komplett ist, benötigst du eine Möglichkeit, um ihn im Level aufzurufen. Du verwendet ein weiteres Verse-Gerät, um deine Props zu koordinieren und alle einzurichten, wenn das Spiel beginnt. Befolge die nächsten Schritte, um deine Hindernisse zu koordinieren und deine Plattformen zu bewegen.
Erstelle ein neues Verse-Gerät mit dem Namen
prop_animatormithilfe von Verse Explorer. Dies ist das Gerät, das die Bewegung deiner Props koordiniert.Füge in
prop_animatorein bearbeitbares Array vontranslating_propmit dem NamenTranslatingPropshinzu. Rufe dann inOnBegin()in einemfor-AusdruckSetup()auf jedem Prop auf. Deine vollständigeprop_animator-Datei sollte wie folgt aussehen:Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation." # Coordinates moving props through animation by calling each moveable_prop's Setup() method. prop_animator := class(creative_device): # Array of moveable_props that translate using animation.Speichere deinen Code und kompiliere ihn.
Ziehe dein
prop_animator-Gerät in den Level.
Verbinden von Props mit Geräten
Lösche zurück im Editor einige der Props in der Nähe des Starts, um eine Lücke zu erzeugen. Füge deinem Level zwei Props FG01 Schwebeplattform M hinzu. Da dies die Plattformen sind, die du animierst, nenne sie TranslatingPlatform. Füge dann mehrere FG01 Schaltfläche Bulb-Props hinzu, die die Ziele sind, zu denen sich jede Plattform bewegen wird. Benenne diese PlatformTarget. Platziere die Plattformen über der Lücke und stelle sicher, dass du die Ziele dort platzierst, wo sich die Plattformen befinden sollen. Du kannst mehrere Ziele für jede Plattform festlegen.
Einrichtung der zu verschiebenen Props. Jede Plattform verschiebt sich zwischen zwei Bewegungszielen hin und her, wie durch die Pfeile angezeigt.
Wenn du die Ziel-Props während des Gameplays ausblenden möchtest, stelle sicher, dass du für jedes Ziel In-Game ausgeblendeter Actor unter Rendering auf True setzt.
Ziehe dein prop_animator-Gerät in den Level und wähle es aus. Füge im Outliner für jede Plattform ein Array-Element zu TranslatingProps hinzu. Weise jedem Prop die folgenden Werte zu:
| Option | Wert | Erklärung |
|---|---|---|
MoveTargets | Weise die Ziele zu, zu denen sich dein Prop bewegen soll. | Dies sind die Kreativmodus-Prop-Ziele, zu denen sich dein Prop in der entsprechenden Reihenfolge bewegt. |
RootProp | Dem zu animierenden Prop zuweisen. | Dies ist das Prop, das du animierst. |
Klicke auf Sitzung starten und sieh dir an, wie deine Plattformen animiert werden! Versuche, MoveDuration und MoveEaseType sowie die Start- und Endverzögerungen zu variieren, um verschiedene Szenarien zu erstellen.
Die Verschiebung ist erledigt und im nächsten Abschnitt erstellst du Props, die sich in verschiedene Richtungen drehen.
Nächster Schritt
Vollständiger Code
Dies ist der vollständige Code, der in diesem Teil erstellt wurde:
translating_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget."
# A prop that moves (translates) toward either a Creative prop target
# or a position in world space.
translating_prop<public> := class<concrete>(movable_prop):
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation."
# Coordinates moving props through animation by calling each moveable_prop's Setup() method.
prop_animator := class(creative_device):
# Array of moveable_props that translate using animation.