In Plattformspielen findest du teilweise Hindernisse, die ihre Größe verändern. Das können Plattformen sein, die schrumpfen und sich ausdehnen, oder entlang einer bestimmten Achse größer oder kleiner werden. Wenn die Abmessungen eines Objekts auf diese Art verändert werden, wird dies als das Ändern der Skalierung bezeichnet.
Die Skalierung eines Objekts sagt dir, um wie viel seine Abmessungen relativ zu sich selbst multipliziert werden sollen. Normalerweise haben Objekte die Skalierung {X := 1.0, Y := 1.0, Z := 1.0}. Wenn du den Z-Wert der Objektskalierung verdoppelst, wird es doppelt so hoch. Wenn du ihn halbierst, ist es halb so hoch.
Die Skalierung ist der letzte Teil des Transformationsrätsels. In diesem Abschnitt erfährst du, wie du die Skalierung veränderst, um Objekte zu erzeugen, die auf verschiedene Größen anwachsen und schrumpfen.
Erstellen von Props, die skalieren
Befolge diese Schritte, um Code zu erstellen, der deine Props skaliert:
-
Erstelle mit dem Verse-Explorer eine neue Verse-Klasse mit der Bezeichnung
scaling_prop, die vonmovable_properbt. Füge dieser Klasse den Bezeichner<concrete>hinzu, um ihre Eigenschaften für UEFN freizugeben.# Ein Prop, das entweder auf eine vorgegebene Skalierung oder die Skalierung eines Kreativmodus-Prop skaliert scaling_prop<public> := class<concrete>(movable_prop): -
Füge die Anweisungen
using { /Fortnite.com/Devices/CreativeAnimation }undusing { /UnrealEngine.com/Temporary/SpatialMath }ganz oben zu deiner 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.using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "Die optionale Position, zu der die Bewegung im Welt-Bereich erfolgen soll. Verwende dies, wenn du kein MoveTarget festlegen möchtest." # Ein Prop, das entweder auf eine vorgegebene Skalierung oder die Skalierung eines Kreativmodus-Prop skaliert scaling_prop<public> := class<concrete>(movable_prop): -
Füge oben in der Klassendefinition von
scaling_propdie folgenden Felder hinzu.-
Ein bearbeitbares
vector3-Array mit der BezeichnungScaleTargets. Dies sind die Skalierungen, auf die dein Prop anwächst und schrumpft. NachdemMove()abgeschlossen ist, wird die Skalierung des Prop um diesen Wert multipliziert.# Das Array der vector3-Ziele, auf die das RootProp skaliert wird @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} -
Ein bearbeitbares optionales
creative_propmit der BezeichnungMatchScaleTarget. Wenn du möchtest, dass dein Prop passend zur Skalierung eines anderen Prop skaliert wird, kannst du diesen Wert festlegen, stattScaleTargetszu verwenden. Du kannst es zum Beispiel verwenden, wenn du eine Reihe von Plattformen erzeugen möchtest, die alle auf die gleiche Größe anwachsen, bevor sie zurückgesetzt werden.# Das optionale Kreativmodus-Prop, an dessen Skalierung sich das RootProp anpassen soll @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false -
Eine
rotation-Variable mit der BezeichnungTargetScale. Dies ist die Skalierung, in deren Richtung das Prop aktuell skaliert wird.# Die Skalierung, die das Prop aktuell anvisiert var TargetScale:vector3 = vector3{}
-
-
Deine endgültige Klassendefinition sollte wie folgt aussehen:
using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "Die optionale Position, zu der die Bewegung im Welt-Bereich erfolgen soll. Verwende dies, wenn du kein MoveTarget festlegen möchtest." # Ein Prop, das entweder auf eine vorgegebene Skalierung oder die Skalierung eines Kreativmodus-Prop skaliert scaling_prop<public> := class<concrete>(movable_prop): # Das Array der vector3-Ziele, auf die das RootProp skaliert wird @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # Das optionale Kreativmodus-Prop, an dessen Skalierung sich das RootProp anpassen soll @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # Die Skalierung, die das Prop aktuell anvisiert var TargetScale:vector3 = vector3{} -
Da du bereits die
Move()-Funktion eingerichtet hast, die dein Prop inmovable_propbewegt, kannst du sie in dieser Klasse außer Kraft setzen. Setze dieMove()-Funktion in deinerscaling_prop-Klasse außer Kraft. Prüfe inMove()zuerst, ob dasMatchScaleTargetfestgelegt ist, und speichere es in einerScaleToMatch-Variable. Wenn das der Fall ist, setzeTargetScaleaufScaleToMatch, rufe dannMoveToEase()auf und übergibTargetScale,MoveDuration,MoveEaseTypeundanimation_mode.OneShot. Das ist dieMoveToEase()-Funktion, die du zuvor überladen hast, die nur die Skalierung verändert.# Skaliere das RootProp in Richtung von ScaleTarget oder MatchScaleTarget, wenn es festgelegt ist. Move<override>()<suspends>:void= # Setze TargetScale auf MatchScaleTarget, wenn es festgelegt ist. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Rufe MoveToEase auf, um die Skalierung des Prop zu starten. Der OneShot-Animationsmodus gibt die Animation einmal wieder. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Wenn du kein
MatchScaleTargetfestgelegt hast, musst du durch deinScaleTargets-Array iterieren. Iteriere in einemfor-Ausdruck durch jedesScaleTargetinScaleTargetsund setzeTargetScaleauf dasScaleTarget. Rufe dannMoveToEase()auf und übergib die gleichen Werte wie zuvor. Deine vollständigeMove()-Funktion sollte wie folgt aussehen:# Skaliere das RootProp in Richtung von ScaleTarget oder MatchScaleTarget, wenn es festgelegt ist. Move<override>()<suspends>:void= # Setze TargetScale auf MatchScaleTarget, wenn es festgelegt ist. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Rufe MoveToEase auf, um die Skalierung des Prop zu starten. Der OneShot-Animationsmodus gibt die Animation einmal wieder. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # Andernfalls erfolgt die Skalierung zu jedem Ziel im ScaleTargets-Array. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget # Rufe MoveToEase auf, um die Skalierung des Prop zu starten. Der OneShot-Animationsmodus gibt die Animation einmal wieder. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Füge in deiner
prop_animator-Geräteklasse ein neues bearbeitbares Array vonscaling_propmit der BezeichnungScalingPropshinzu. Füge einen weiterenfor-Ausdruck zuOnBegin()hinzu, der eine Schleife durch alle skalierenden Props ausführt undSetup()auf sie aufruft. Deine aktualisierteprop_animator-Klasse sollte wie folgt aussehen:using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "Die Props, die eine Verschiebung (Bewegung) über eine Animation ausführen" RotatingPropsTip<localizes>:message = "Die Props, die über eine Animation gedreht werden" ScalingPropsTip<localizes>:message = "Die Props, die über eine Animation skaliert werden" # Koordiniere die Bewegung der Props im Verlauf der Animation durch Aufrufen der Setup()-Methode jedes Prop. prop_animator := class(creative_device): # Das Array der movable_props, die eine Verschiebung durch eine Animation ausführen @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # Das Array der movable_props, die eine Rotation durch eine Animation ausführen @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # Das Array der movable_props, die eine Skalierung durch eine Animation ausführen @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{} # Wird ausgeführt, wenn das Gerät in einem laufenden Spiel gestartet wird OnBegin<override>()<suspends>:void= # Rufe für jedes Prop Setup() auf, um die Animation zu beginnen. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() -
Speichere deinen Code und kompiliere ihn.
Verknüpfen von Props mit Geräten
Lösche zurück im Editor einige der Props nach dem Abschnitt zum Drehen der Props, aber vor den angehobenen Blöcken, um eine weitere Lücke zu erzeugen. Füge ein FG01 Punch Glove zu einem Level hinzu. Nenne den Handschuh ScalingGlove. Positioniere den Handschuh in der Mitte der Lücke und drehe ihn so, dass er nach oben weist.
Konfiguration des Schlaghandschuhs. Der Handschuh wird aufwärts skaliert, um einen Aufzug zu erzeugen, der die Spieler anhebt.
Wähle deinen prop animator im Outliner und füge für deinen Handschuh ein Array-Element zu ScalingProps hinzu. Weise dem Prop die folgenden Werte zu:
| Option | Wert | Erläuterung |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | Dieses Prop skaliert auf das Doppelte seiner Abmessungen entlang der Y-Achse und dann wieder zurück auf seine Ausgangsabmessungen. Beachte, dass die Y-Achse jetzt das lokale „Aufwärts“ des Prop ist, da es gedreht wurde. |
| RootProp | Weise dies dem Prop zu, das du animierst. | Dies ist das Prop, das du animierst. |
Übergib deine Änderungen und sieh dir dann deine Props an. Versuche, die verschiedenen Skalierungen zu variieren, um verschiedene Abmessungen zu erzielen, und versuche, andere Props zu skalieren, um verschiedene Szenarien zu erzeugen.
Nächster Schritt
Im nächsten Abschnitt kombinierst du die Bewegung, Rotation und Skalierung, um Props zu erzeugen, die alles machen.
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
Vollständiger Code
Dies ist der vollständige Code, der in diesem Teil erstellt wurde:
scaling_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip<localizes>:message = "Die optionale Position, zu der die Bewegung im Welt-Bereich erfolgen soll. Verwende dies, wenn du kein MoveTarget festlegen möchtest."
# Ein Prop, das entweder auf eine vorgegebene Skalierung oder die Skalierung eines Kreativmodus-Prop skaliert
scaling_prop<public> := class<concrete>(movable_prop):
# Das Array der vector3-Ziele, auf die das RootProp skaliert wird
@editable {ToolTip := MoveTargetsTip}
var ScaleTargets:[]vector3= array{}
# Das optionale Kreativmodus-Prop, an dessen Skalierung sich das RootProp anpassen soll
@editable {ToolTip := MatchScaleTargetTip}
var MatchScaleTarget:?creative_prop = false
# Die Skalierung, die das Prop aktuell anvisiert
var TargetScale:vector3 = vector3{}
# Skaliere das RootProp in Richtung von ScaleTarget oder MatchScaleTarget, wenn es festgelegt ist.
Move<override>()<suspends>:void=
# Setze TargetScale auf MatchScaleTarget, wenn es festgelegt ist.
if:
ScaleToMatch := MatchScaleTarget?.GetTransform().Scale
then:
set TargetScale = ScaleToMatch
# Rufe MoveToEase auf, um die Skalierung des Prop zu starten. Der OneShot-Animationsmodus gibt die Animation einmal wieder.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
else:
# Andernfalls erfolgt die Skalierung zu jedem Ziel im ScaleTargets-Array.
for:
ScaleTarget:ScaleTargets
do:
set TargetScale = ScaleTarget
# Rufe MoveToEase auf, um die Skalierung des Prop zu starten. Der OneShot-Animationsmodus gibt die Animation einmal wieder.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "Die Props, die eine Verschiebung (Bewegung) über eine Animation ausführen"
RotatingPropsTip<localizes>:message = "Die Props, die über eine Animation gedreht werden"
ScalingPropsTip<localizes>:message = "Die Props, die über eine Animation skaliert werden"
# Koordiniere die Bewegung der Props im Verlauf der Animation durch Aufrufen der Setup()-Methode jedes Prop.
prop_animator := class(creative_device):
# Das Array der movable_props, die eine Verschiebung durch eine Animation ausführen
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# Das Array der movable_props, die eine Rotation durch eine Animation ausführen
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# Das Array der movable_props, die eine Skalierung durch eine Animation ausführen
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# Wird ausgeführt, wenn das Gerät in einem laufenden Spiel gestartet wird
OnBegin<override>()<suspends>:void=
# Rufe für jedes Prop Setup() auf, um die Animation zu beginnen.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()