A volte, durante le piattaforme, incontrerai ostacoli che cambiano di dimensione. Potrebbe trattarsi di piattaforme che aumentano e riducono le dimensioni oppure che diventano più alte o più basse lungo un determinato asse. Quando le dimensioni di un oggetto vengono cambiate in questo modo, si parla di modifica della relativa scala.
La scala di un oggetto indica di quanto moltiplicare ciascuna delle sue dimensioni rispetto a se stesso. Normalmente, gli oggetti hanno una scala di {X := 1.0, Y := 1.0, Z := 1.0}. Se raddoppi il valore Z della scala di un oggetto, questo diventa due volte più alto. Se lo dimezzi, sarà alto la metà.
La scala rappresenta la parte finale del puzzle della trasformazione. In questa sezione imparerai a manipolare la scala per creare oggetti che crescono e si riducono secondo dimensioni diverse.
Creazione di oggetti scenografici che si ridimensionano
Segui questa procedura per creare il codice che ridimensiona i tuoi oggetti scenografici:
-
Crea una nuova classe Verse chiamata
scaling_propche eredita damovable_proputilizzando Verse Explorer. Aggiungi l'identificatore<concrete>a questa classe per esporre le relative proprietà a UEFN.# Oggetto scenografico che si ridimensiona in base a una scala fornita o alla scala di un oggetto scenografico Creativo. scaling_prop<public> := class<concrete>(movable_prop): -
Aggiungi le istruzioni all'inizio del file per importare questi moduli
using { /Fortnite.com/Devices/CreativeAnimation }eusing { /UnrealEngine.com/Temporary/SpatialMath }. Ti serviranno per animare il tuo oggetto scenografico. I tooltip utilizzati in questa sezione sono inclusi anche qui.using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "Posizione opzionale per muoversi nello Spazio mondo. Utilizzala se non vuoi impostare un MoveTarget". # Oggetto scenografico che si ridimensiona in base a una scala fornita o alla scala di un oggetto scenografico Creativo. scaling_prop<public> := class<concrete>(movable_prop): -
All'inizio della definizione della classe
scaling_prop, aggiungi i seguenti campi.-
Array modificabile
vector3diScaleTargets. Queste sono le scale in base a cui il tuo oggetto scenografico aumenterà e si ridurrà. Dopo il completamento diMove(), la scala dell'oggetto scenografico sarà moltiplicata di questo valore.# Array di target vector3 in base a cui scalare il RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} -
creative_propopzionale modificabile denominatoMatchScaleTarget. Se vuoi che il tuo oggetto scenografico sia ridimensionato in modo da corrispondere alla scala di un altro oggetto scenografico, puoi impostare questo valore invece di utilizzareScaleTargets. Ad esempio, puoi utilizzare questa funzione se vuoi creare una serie di piattaforme che aumentano tutte della stessa dimensione prima di reimpostarsi.# Oggetto scenografico Creativo opzionale per il RootProp a cui far corrispondere la scala. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false -
Variabile
rotationdenominataTargetScale. Questa è la scala verso la quale l'oggetto scenografico si sta attualmente ridimensionando.# Scala a cui l'oggetto scenografico è attualmente indirizzato. var TargetScale:vector3 = vector3{}
-
-
La tua definizione della classe finale deve essere simile a:
using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "Posizione opzionale per muoversi nello Spazio mondo. Utilizzala se non vuoi impostare un MoveTarget". # Oggetto scenografico che si ridimensiona in base a una scala fornita o alla scala di un oggetto scenografico Creativo. scaling_prop<public> := class<concrete>(movable_prop): # Array di target vector3 in base a cui scalare il RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # Oggetto scenografico Creativo opzionale per il RootProp a cui far corrispondere la scala. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # Scala a cui l'oggetto scenografico è attualmente indirizzato. var TargetScale:vector3 = vector3{} -
Poiché hai già impostato la funzione
Move()che muove il tuo oggetto scenografico inmovable_prop, puoi eseguirne l'override in questa classe. Esegui l'override della funzioneMove()nella tua classescaling_prop. InMove(), verifica, per prima cosa, seMatchScaleTargetè impostato e salvalo in una variabileScaleToMatch. In caso affermativo, impostaTargetScalesuScaleToMatch, quindi chiamaMoveToEase(), passandoTargetScale,MoveDuration,MoveEaseTypeeanimation_mode.OneShot. Questa è la funzioneMoveToEase()che hai sovraccaricato in precedenza e che modifica solo la scala.# Scala RootProp verso ScaleTarget o MatchScaleTarget, se è stato impostato. Move<override>()<suspends>:void= # Imposta TargetScale su MatchScaleTarget, se è configurato. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Chiama MoveToEase per iniziare a ridimensionare l'oggetto scenografico. La modalità di animazione OneShot riproduce l'animazione una volta sola. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Se non hai impostato
MatchScaleTarget, allora devi iterare l'arrayScaleTargets. In un'espressionefor, itera ogniScaleTargetinScaleTargetse impostaTargetScalesuScaleTarget. Quindi chiamaMoveToEase(), passando gli stessi valori precedenti. La tua funzione completaMove()deve essere simile a:# Scala RootProp verso ScaleTarget o MatchScaleTarget, se è stato impostato. Move<override>()<suspends>:void= # Imposta TargetScale su MatchScaleTarget, se è configurato. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Chiama MoveToEase per iniziare a ridimensionare l'oggetto scenografico. La modalità di animazione OneShot riproduce l'animazione una volta sola. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # In caso contrario, scala su ogni target dell'array ScaleTargets. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget # Chiama MoveToEase per iniziare a ridimensionare l'oggetto scenografico. La modalità di animazione OneShot riproduce l'animazione una volta sola. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Nella classe del dispositivo
prop_animator, aggiungi un nuovo array modificabile discaling_propdenominatoScalingProps. Aggiungi un'altra espressioneforaOnBegin()che esegue in loop tutti gli oggetti scenografici di ridimensionamento e chiamaSetup()su di essi. La tua classe aggiornataprop_animatordeve essere simile a:using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "Oggetti scenografici che traslano (si muovono) utilizzando l'animazione". RotatingPropsTip<localizes>:message = "Gli oggetti scenografici che ruotano utilizzando l'animazione". ScalingPropsTip<localizes>:message = "Oggetti scenografici che si ridimensionano utilizzando l'animazione". # Coordina lo spostamento degli oggetti scenografici attraverso l'animazione chiamando il metodo Setup() di ogni oggetto scenografico. prop_animator := class(creative_device): # Array di moveable_props che si traslano utilizzando l'animazione. @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # Array di movable_props che ruotano utilizzando l'animazione. @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # Array di moveable_props che si ridimensionano utilizzando l'animazione. @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{} # Viene eseguito quando il dispositivo viene avviato in un gioco in esecuzione OnBegin<override>()<suspends>:void= # Per ogni oggetto scenografico, chiama Setup() per avviare l'animazione. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() -
Salva il codice e compilalo.
Collegamento degli oggetti scenografici ai dispositivi
Nell'editor, elimina alcuni degli oggetti scenografici dopo la sezione degli oggetti scenografici rotanti ma prima dei blocchi rialzati per creare altro spazio. Aggiungi un FG01 Guanto da boxe al tuo livello. Assegna un nome al guanto ScalingGlove. Posiziona il guanto al centro dello spazio e ruotalo in modo che sia rivolto verso l'alto.
Configurazione del guanto da boxe. Il guanto si allarga fino a creare un ascensore per sollevare i giocatori.
Seleziona il tuo animatore di oggetti scenografici nell'Outliner e aggiungi un elemento array a ScalingProps per il tuo guanto. Assegna all'oggetto scenografico i seguenti valori:
| Opzione | Valore | Spiegazione |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | Questo oggetto raddoppierà le sue dimensioni sull'asse Y poi tornerà a quelle iniziali. Tieni presente che, poiché l'oggetto scenografico è ruotato, l'asse Y è ora il punto alto dell'oggetto scenografico. |
| RootProp | Assegna all'oggetto scenografico che stai animando. | Questo è l'oggetto scenografico che stai animando. |
Apporta le tue modifiche e controlla i tuoi oggetti scenografici! Sperimenta la variazione delle scale per ottenere dimensioni diverse e prova a scalare altri oggetti scenografici per creare scenari differenti.
Passaggio successivo
Nella prossima sezione, combinerai movimento, rotazione e scala per creare oggetti scenografici in grado di eseguire tutte e tre le operazioni.
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
Codice completo
Ecco il codice completo compilato in questa sezione:
scaling_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip<localizes>:message = "Posizione opzionale per muoversi nello Spazio mondo. Utilizzala se non vuoi impostare un MoveTarget".
# Oggetto scenografico che si ridimensiona in base a una scala fornita o alla scala di un oggetto scenografico Creativo.
scaling_prop<public> := class<concrete>(movable_prop):
# Array di target vector3 in base a cui scalare il RootProp.
@editable {ToolTip := MoveTargetsTip}
var ScaleTargets:[]vector3= array{}
# Oggetto scenografico Creativo opzionale per il RootProp a cui far corrispondere la scala.
@editable {ToolTip := MatchScaleTargetTip}
var MatchScaleTarget:?creative_prop = false
# Scala a cui l'oggetto scenografico è attualmente indirizzato.
var TargetScale:vector3 = vector3{}
# Scala il RootProp verso lo ScaleTarget o il MatchScaleTarget, se è stato impostato.
Move<override>()<suspends>:void=
# Imposta TargetScale su MatchScaleTarget, se è configurato.
if:
ScaleToMatch := MatchScaleTarget?.GetTransform().Scale
then:
set TargetScale = ScaleToMatch
# Chiama MoveToEase per iniziare a ridimensionare l'oggetto scenografico. La modalità di animazione OneShot riproduce l'animazione una volta sola.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
else:
# In caso contrario, scala su ogni target dell'array ScaleTargets.
for:
ScaleTarget:ScaleTargets
do:
set TargetScale = ScaleTarget
# Chiama MoveToEase per iniziare a ridimensionare l'oggetto scenografico. La modalità di animazione OneShot riproduce l'animazione una volta sola.
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 = "Oggetti scenografici che traslano (si muovono) utilizzando l'animazione".
RotatingPropsTip<localizes>:message = "Gli oggetti scenografici che ruotano utilizzando l'animazione".
ScalingPropsTip<localizes>:message = "Oggetti scenografici che si ridimensionano utilizzando l'animazione".
# Coordina lo spostamento degli oggetti scenografici attraverso l'animazione chiamando il metodo Setup() di ogni oggetto scenografico.
prop_animator := class(creative_device):
# Array di moveable_props che si traslano utilizzando l'animazione.
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# Array di movable_props che ruotano utilizzando l'animazione.
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# Array di moveable_props che si ridimensionano utilizzando l'animazione.
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# Viene eseguito quando il dispositivo viene avviato in un gioco in esecuzione
OnBegin<override>()<suspends>:void=
# Per ogni oggetto scenografico, chiama Setup() per avviare l'animazione.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()