Configurazione del livello
Per cominciare, inizializza un nuovo progetto dal modello di isola Fall Guys Iniziale. Quest'isola iniziale contiene un percorso già pronto da navigare che potrai personalizzare con il movimento in questo tutorial.
Definire gli oggetti scenografici che si muovono
Prima di iniziare a muovere i tuoi oggetti scenografici, devi definire cosa sia un oggetto scenografico mobile. Puoi utilizzare un dispositivo Verse per muovere direttamente un oggetto scenografico, ma ciò può risultare complicato se vuoi muovere più oggetti scenografici contemporaneamente. Invece, definirai una classe movable_prop astratta. Questa classe contiene l'oggetto scenografico che vuoi muovere e molti altri valori che utilizzerai per personalizzare la logica e la tempistica del movimento.
Segui i passaggi seguenti per definire il tuo oggetto scenografico mobile:
Crea una nuova classe Verse denominata
movable_proputilizzando Verse Explorer. Poiché si tratta di una classe Verse, e non di un dispositivo, crea il file utilizzando Crea nuovo. E poiché sarà la classe astratta da cui ricaverai le diverse sottoclassi di oggetti scenografici mobili, aggiungi lo specificatore<abstract>a questa classe. Per informazioni su come creare una nuova classe in Verse, vedi Modificare ed eseguire il tuo primo programma Verse.Verse# Defines a Creative prop that moves to a target or location using animation. movable_prop<public> := class<abstract>():Aggiungi i percorsi di importazione
using { /Fortnite.com/Devices },using { /Verse.org/Simulation }eusing { /UnrealEngine.com/Temporary/SpatialMath }all'inizio del file. Dovrai importare questi moduli per gestire la matematica che fa muovere i tuoi oggetti scenografici.Ogni campo di questa classe includerà anche un
ToolTip. Dopo l'aggiunta di un messaggioToolTipai campi modificabili, viene visualizzato un suggerimento quando passi il mouse sopra il campo in UEFN. Tutti i tooltip utilizzati in questa classe sono inclusi di seguito. Puoi copiare e incollare questi tooltip o definirne di tuoi.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."Definisci i campi di cui ha bisogno ogni oggetto scenografico mobile. Nella definizione della classe
movable_prop, aggiungi i seguenti campi:Un
creative_propmodificabile denominatoRootProp. Questo è l'oggetto scenografico Creativo che potrai muovere durante il gameplay.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{}Un
floatmodificabile denominatoMoveDuration. È il tempo che l'oggetto scenografico impiega per raggiungere la sua destinazione.Verse# The duration in seconds it takes for the prop to move to its destination. @editable {ToolTip := MoveDurationTip} MoveDuration:float = 3.0Un
floatmodificabile denominatoMoveStartDelay. È il tempo in secondi che l'oggetto scenografico attende prima di muoversi.Verse# The duration in seconds to wait before movement begins. @editable {ToolTip := MoveStartDelayTip} MoveStartDelay:float = 0.0Un
floatmodificabile denominatoMoveEndDelay. È il tempo in secondi che l'oggetto scenografico attende dopo essersi mosso.Verse# The duration in seconds to wait after movement ends. @editable {ToolTip := MoveEndDelayTip} MoveEndDelay:float = 0.0Un
Logicmodificabile denominatoMoveOnceAndStop. Questa controlla se l'oggetto scenografico si muove una sola volta o se ripete il movimento dopo averlo terminato.Verse# Whether the RootProp should stop in place when it finishes moving. @editable {ToolTip := MoveOnceAndStopTip} MoveOnceAndStop:logic = falseUn
Logicmodificabile denominatoShouldReset. Questa controlla se l'oggetto scenografico si ripristina nella posizione originale dopo aver terminato il movimento.Verse# Whether the RootProp should reset back to the starting position when it # finishes moving. @editable {ToolTip := ShouldResetTip} ShouldReset:logic = falseUna trasformazione di una variabile denominata
StartingTransform. Questa è la trasformazione in cui si trova ilRootPropquando inizia il movimento.Verse# The starting transform of the RootProp. var StartingTransform:transform = transform{}
La tua definizione della classe finale deve essere simile a:
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."Prima che l'oggetto scenografico inizi a muoversi, deve sapere da dove parte il movimento. Per eseguire questa operazione, definirai una nuova funzione per impostare
StartingTransformprima del movimento:Aggiungi un nuovo metodo
SetStartingTransform()alla definizione della classemovable_prop.All'interno di
SetStartingTransform(), impostaStartingTransformalla trasformazione diRootProputilizzandoGetTransform().La funzione
SetStartingTransform()completa deve essere simile alla seguente:Verse# Sets the StartingTransform to the current transform of the RootProp. SetStartingTransform():void= set StartingTransform = RootProp.GetTransform()
Per iniziare a spostare l'oggetto scenografico, definisci una nuova funzione
Move():Aggiungi un nuovo metodo
Move()alla definizione della classemovable_prop.Aggiungi il modificatore
<suspends>in modo che questa funzione possa essere eseguita in modo asincrono. Dal momento che questa è la versione della funzione nella classe base e non verrà usata, esegui semplicemente unreturnimmediato.La funzione
Move()completa deve essere simile a: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
Se vuoi che il tuo oggetto scenografico si reimposti quando finisce di muoversi, devi teletrasportarlo nella sua posizione iniziale. Per gestire questa situazione, aggiungi un nuovo metodo
Reset()alla definizione della classemovable_prop:Aggiungi i modificatori
<decides><transacts>a questa funzione per consentirne il rollback in caso di errore di reset. Ciò potrebbe verificarsi se l'oggetto scenografico viene eliminato durante il gameplay.All'interno di
Reset(), teletrasportaRootPropalla suaStartingTransformutilizzandoTeleportTo[].La funzione
Reset()completata dovrebbe essere simile alla seguente:Verse# Reset the RootProp by teleporting it back to its Starting Transform. Reset()<decides><transacts>:void= RootProp.TeleportTo[StartingTransform]
Dopo aver definito un numero elevato di funzioni, puoi collegarle tra loro. Per gestire tutte le varie funzioni di movimento, aggiungi un nuovo metodo,
ManageMovement(), alla definizione della classemovable_prop. Aggiungi il modificatore<suspends>per far eseguire questa funzione in modo asincrono.Verse# Loops moving the RootProp to its target by calling Move(), and handles # any logic when the movement begins and ends. ManageMovement()<suspends>:void=In
ManageMovement(), crea un'espressioneloopche gestisce il movimento. All'interno del loop, prima eseguiSleep()perMoveStartDelaysecondi, poi chiamaMove().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()Quando la piattaforma finisce di muoversi, deve proseguire il movimento, ripristinare la sua posizione o fermarsi. Per gestire l'arresto, in un'espressione
if, controlla seMoveOnceAndStopè vero. In tal caso, interrompi il loop conbreak. Dopo l'arresto del movimento, eseguiSleep()perMoveEndDelaysecondi. Infine, in un'altra espressioneif, controlla seShouldResetè vero e chiamaReset[], in caso affermativo. La funzioneManageMovement()completa deve essere simile alla seguente: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:Poiché non esiste una funzione
OnBegin()in questa classe, è necessario che altre classi chiaminoManageMovement()per iniziare a muovere la piattaforma. Aggiungi una nuova funzioneSetup()alla definizione della classemovable_prop. All'interno diSetup(), chiama primaSetStartingTransform(), poi genera una funzioneManageMovement()per avviare la piattaforma. La funzioneSetup()completa deve essere simile aVerse# Set the StartingTransform, then begin movement by spawning ManageMovement. Setup():void= SetStartingTransform() spawn{ManageMovement()}
Passaggio successivo
Una volta completata la tua classe astratta, nel prossimo passaggio scoprirai come farla muovere attraverso l'animazione.
Codice completo
Ecco il codice completo compilato in questa sezione:
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."