Un altro ostacolo della piattaforma comune al genere è rappresentato dagli oggetti che ruotano, come ad esempio una piattaforma rotante su cui devi muoverti continuamente o una barra che si muove avanti e indietro e su cui devi saltare.
Il secondo componente della trasformazione di un oggetto è la sua rotazione e puoi manipolare un oggetto per farlo ruotare attorno a un asse. Ci sono diversi modi in cui puoi utilizzare la rotazione per creare sfide piattaforma uniche e in questa sezione imparerai come codificarle.
Creazione di oggetti scenografici che ruotano
Segui questa procedura per creare il codice che ruota i tuoi oggetti scenografici:
-
Crea una nuova classe Verse chiamata
rotating_propche eredita damovable_proputilizzando Verse Explorer. Aggiungi l'identificatore<concrete>a questa classe per esporre le relative proprietà a UEFN.# Oggetto scenografico che ruota di un'ulteriore rotazione o che ruota in modo da corrispondere alla # rotazione di un oggetto scenografico Creativo. rotating_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 } AdditionalRotationTip<localizes>:message = "Rotazione da applicare al RootProp". ShouldRotateForeverTip<localizes>:message = "Determina se il RootProp deve ruotare per sempre". MatchRotationTargetTip<localizes>:message = "Oggetto scenografico opzionale alla cui rotazione il RootProp deve ruotare. Utilizzalo se non vuoi impostare una Rotazione aggiuntiva". # Oggetto scenografico che ruota di un'ulteriore rotazione o che ruota in modo da corrispondere alla # rotazione di un oggetto scenografico Creativo. rotating_prop<public> := class<concrete>(movable_prop): - All'inizio della definizione della classe
rotating_prop, aggiungi i seguenti campi.-
rotationmodificabile denominataAdditionalRotation. Questa è la rotazione da applicare all'oggetto scenografico. Dopo il completamento diMove(), la rotazione dell'oggetto scenografico sarà sfalsata di questo valore.# Rotazione aggiuntiva da applicare al RootProp. @editable {ToolTip := AdditionalRotationTip} AdditionalRotation:rotation = rotation{} -
logicmodificabile denominataShouldRotateForever. Specifica se l'oggetto scenografico deve continuare a ruotare senza reimpostarsi.# Determina se il RootProp deve ruotare per sempre. @editable {ToolTip := ShouldRotateForeverTip} ShouldRotateForever:logic = true -
creative_propopzionale modificabile denominatoMatchRotationTarget. Se vuoi che il tuo oggetto scenografico ruoti in base alla rotazione di un altro, puoi impostare questo valore invece di utilizzare laAdditionalRotation.# Rotazione dell'oggetto scenografico opzionale a cui RootProp deve far corrispondere la propria rotazione. Da utilizzare se # non vuoi impostare una rotazione aggiuntiva. @editable {ToolTip := MatchRotationTargetTip} MatchRotationTarget:?creative_prop = false -
Variabile
rotationdenominataTargetRotation. Questa è la rotazione verso cui sta ruotando l'oggetto scenografico.# Rotazione verso cui l'oggetto scenografico sta attualmente ruotando. var TargetRotation:rotation = rotation{}
-
-
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 } AdditionalRotationTip<localizes>:message = "Rotazione da applicare al RootProp". ShouldRotateForeverTip<localizes>:message = "Determina se il RootProp deve ruotare per sempre". MatchRotationTargetTip<localizes>:message = "Oggetto scenografico opzionale alla cui rotazione il RootProp deve ruotare. Utilizzalo se non vuoi impostare una Rotazione aggiuntiva". # Oggetto scenografico che ruota di un'ulteriore rotazione o che ruota in modo da corrispondere alla # rotazione di un oggetto scenografico Creativo. rotating_prop<public> := class<concrete>(movable_prop): # Rotazione aggiuntiva da applicare al RootProp. @editable {ToolTip := AdditionalRotationTip} AdditionalRotation:rotation = rotation{} # Determina se il RootProp deve ruotare per sempre. @editable {ToolTip := ShouldRotateForeverTip} ShouldRotateForever:logic = true # Rotazione dell'oggetto scenografico opzionale a cui RootProp deve far corrispondere la propria rotazione. Da utilizzare se # non vuoi impostare una rotazione aggiuntiva. @editable {ToolTip := MatchRotationTargetTip} MatchRotationTarget:?creative_prop = false # Rotazione verso cui l'oggetto scenografico sta attualmente ruotando. var TargetRotation:rotation = rotation{} -
Poiché hai già impostato la funzione
Move()che muove il tuo oggetto scenografico inmovable_prop, puoi eseguirne l'override in questa classe. Esegue l'override della funzioneMove()nella tua classerotating_prop. InMove(), verifica, per prima cosa, seMatchRotationTargetè impostato e salvalo in una variabileRotationToMatch. In caso affermativo, impostaTargetRotationsuRotationToMatch. In caso contrario, imposta suAdditionalRotation.# Ruota RootProp applicando TargetRotation o verso MoveTarget, se è impostato. Move<override>()<suspends>:void= # Imposta TargetRotation sulla rotazione di MoveTarget, se MoveTarget è configurato. if: RotationToMatch := MatchRotationTarget?.GetTransform().Rotation then: set TargetRotation = RotationToMatch else: set TargetRotation = AdditionalRotation - Come per
translating_prop, specifica la modalità di animazione da riprodurre. Inizializza una nuova variabileanimation_modedenominataAnimationModesuanimation_mode.OneShot. Ciò significa che l'animazione si arresterà una volta che l'oggetto avrà raggiunto il suo target. Se l'oggetto scenografico non deve ruotare all'infinito o non deve muoversi una volta e poi fermarsi, imposta la modalità di animazione su ping pong. Utilizzando ping pong, potrai creare oggetti che oscillano avanti e indietro, come la barra di un metronomo o un ponte che si alza e si abbassa.# Imposta la modalità di animazione predefinita per la riproduzione. # La modalità di animazione OneShot riproduce l'animazione una volta sola. var AnimationMode:animation_mode := animation_mode.OneShot # Se il RootProp non deve reimpostarsi e non deve fermarsi al termine della rotazione, # imposta la modalità di animazione su PingPong. if: not ShouldRotateForever? and not MoveOnceAndStop? then: set AnimationMode = animation_mode.PingPongSe imposti
ShouldResetsu falso eShouldRotateForeversu vero, il tuo oggetto scenografico deve mantenere la sua posizione dopo ogni animazione, continuando a eseguire in loop la funzioneMove(). -
Determina la rotazione dell'oggetto scenografico principale in una nuova variabile denominata
RotateByMoveRotation, chiamandoRotateBy()sullaStartingTransforme passando laTargetRotation. Infine, chiama la funzioneMoveToEase(). La tua funzione completaMove()deve avere un aspetto simile.# Ruota RootProp applicando TargetRotation o verso MoveTarget, se è impostato. Move<override>()<suspends>:void= # Imposta TargetRotation sulla rotazione di MoveTarget, se MoveTarget è configurato. if: RotationToMatch := MatchRotationTarget?.GetTransform().Rotation then: set TargetRotation = RotationToMatch else: set TargetRotation = AdditionalRotation # Imposta la modalità di animazione predefinita per la riproduzione. # La modalità di animazione OneShot riproduce l'animazione una volta sola. var AnimationMode:animation_mode := animation_mode.OneShot # Se il RootProp non deve reimpostarsi e non deve fermarsi al termine della rotazione, # imposta la modalità di animazione su PingPong. if: not ShouldRotateForever? and not MoveOnceAndStop? then: set AnimationMode = animation_mode.PingPong # Determina la rotazione verso cui ruotare eseguendo la rotazione di StartingTransform # in base all'AdditionalRotation. Quindi inizia la rotazione. RotateByTargetRotation := StartingTransform.Rotation.RotateBy(TargetRotation) RootProp.MoveToEase(RotateByTargetRotation, MoveDuration, MoveEaseType, AnimationMode) -
Nella classe del dispositivo
prop_animator, aggiungi un nuovo array modificabile dirotating_propdenominatoRotatingProps. Aggiungi un'altra espressioneforaOnBegin()che esegue in loop tutti gli oggetti scenografici rotanti 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". # Coordina lo spostamento degli oggetti scenografici attraverso l'animazione chiamando il metodo Setup() di ogni oggetto scenografico. prop_animator := class(creative_device): # Array di oggetti scenografici che si traslano utilizzando l'animazione. @editable TranslatingProps:[]translating_prop = array{} @editable RotatingProps:[]rotating_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() - Salva il codice e compilalo.
Collegamento degli oggetti scenografici ai dispositivi
Nell'editor, elimina alcuni degli oggetti scenografici dopo la sezione degli oggetti scenografici da traslare per creare altro spazio. Aggiungi al tuo livello una FG01 Base girevole e una FG01 SpinningBar Doppia S. Assegna un nome alla base RotatingBase e alla barra Barra rotante. Posiziona la barra sopra la base e colloca entrambi gli oggetti scenografici sopra lo spazio.
Configurazione dei due oggetti scenografici rotanti. Sia la barra rotante che la base rotante girano nella stessa direzione a velocità diverse.
Seleziona il tuo animatore di oggetti scenografici nell'Outliner e aggiungi un elemento array a RotatingProps per ogni oggetto scenografico rotante. Assegna a ciascun oggetto scenografico i seguenti valori:
| Opzione | Valore | Spiegazione |
|---|---|---|
| Rotazione aggiuntiva | Z, 90.0 | Questo oggetto scenografico eseguirà ogni volta una rotazione di 90 gradi attorno all'asse Z. |
| RootProp | Assegna all'oggetto scenografico che stai animando | Questo è l'oggetto scenografico che stai animando. |
| Durata movimento | 2.0, 3.0 | Assegna a uno degli oggetti scenografici una durata inferiore in modo che ruotino a velocità diverse. |
| Tipo attenuazione movimento | Lineare | Questa operazione animerà i tuoi oggetti scenografici a una velocità costante. |
Apporta le tue modifiche e controlla i tuoi oggetti scenografici! Sperimenta la variazione dei valori per ottenere diverse rotazioni e prova a ruotare in ognuna delle diverse dimensioni per creare tipi di ostacoli differenti.
Passaggio successivo
Nella prossima sezione, combinerai il movimento e la rotazione per creare oggetti scenografici in grado di eseguire entrambe le operazioni!
Codice completo
Ecco il codice completo compilato in questa sezione:
rotating_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
AdditionalRotationTip<localizes>:message = "Rotazione da applicare al RootProp".
ShouldRotateForeverTip<localizes>:message = "Determina se il RootProp deve ruotare per sempre".
MatchRotationTargetTip<localizes>:message = "Oggetto scenografico opzionale alla cui rotazione il RootProp deve ruotare. Utilizzalo se non vuoi impostare una Rotazione aggiuntiva".
# Oggetto scenografico che ruota di un'ulteriore rotazione o che ruota in modo da corrispondere alla
# rotazione di un oggetto scenografico Creativo.
rotating_prop<public> := class<concrete>(movable_prop):
# Rotazione aggiuntiva da applicare al RootProp.
@editable {ToolTip := AdditionalRotationTip}
AdditionalRotation:rotation = rotation{}
# Determina se il RootProp deve ruotare per sempre.
@editable {ToolTip := ShouldRotateForeverTip}
ShouldRotateForever:logic = true
# Rotazione dell'oggetto scenografico opzionale a cui RootProp deve far corrispondere la propria rotazione. Da utilizzare se
# non vuoi impostare una rotazione aggiuntiva.
@editable {ToolTip := MatchRotationTargetTip}
MatchRotationTarget:?creative_prop = false
# Rotazione verso cui l'oggetto scenografico sta attualmente ruotando.
var TargetRotation:rotation = rotation{}
# Ruota RootProp applicando TargetRotation o verso MoveTarget, se è impostato.
Move<override>()<suspends>:void=
# Imposta TargetRotation su RotationToMatch, se è configurata. In caso contrario impostala in base
# ad AdditionalRotation.
if:
RotationToMatch := MatchRotationTarget?.GetTransform().Rotation
then:
set TargetRotation = RotationToMatch
else:
set TargetRotation = AdditionalRotation
# Imposta la modalità di animazione predefinita per la riproduzione.
# La modalità di animazione OneShot riproduce l'animazione una volta sola.
var AnimationMode:animation_mode := animation_mode.OneShot
# Se il RootProp non deve reimpostarsi e non deve fermarsi al termine della rotazione,
# imposta la modalità di animazione su PingPong.
if:
not ShouldRotateForever? and not MoveOnceAndStop?
then:
set AnimationMode = animation_mode.PingPong
# Determina la rotazione verso cui ruotare eseguendo la rotazione di StartingTransform
# in base all'AdditionalRotation. Quindi inizia la rotazione.
RotateByTargetRotation := StartingTransform.Rotation.RotateBy(TargetRotation)
RootProp.MoveToEase(RotateByTargetRotation, MoveDuration, MoveEaseType, AnimationMode)
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".
# Coordina lo spostamento degli oggetti scenografici attraverso l'animazione chiamando il metodo Setup() di ogni oggetto scenografico.
prop_animator := class(creative_device):
# Array di oggetti scenografici che si traslano utilizzando l'animazione.
@editable
TranslatingProps:[]translating_prop = array{}
@editable
RotatingProps:[]rotating_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()