Una macchina a stati combina nodi di animazione in stati nominati, come Idle, Walk, Run e Jump. Riproduce lo stato attivo e si fonde in un altro stato quando una condizione di transizione viene valutata come true. Utilizza una macchina a stati per definire quali animazioni possono seguire l'una all'altra senza scrivere logica di transizione in Luau.
Ogni stato si collega a un input sulla macchina a stati. Uno stato può essere un clip, un nodo di fusione o un'altra macchina a stati. La macchina a stati restituisce la posa di animazione attiva o una fusione tra due pose se in transizione, che colleghi al nodo successivo nel grafo.
Requisiti
Prima di creare una macchina a stati, familiarizza con l'Animation Graph Editor, inclusi come aprirlo e creare un grafo di animazione.
Crea una macchina a stati
Il seguente esempio utilizza tre stati da JumpFallLandRunExample: Locomotion, Fall e LandIdle. Il personaggio si muove normalmente, passa a un'animazione di caduta quando è in aria e riproduce un'animazione di atterraggio prima di tornare alla locomozione. Questi passaggi si concentrano sulla macchina a stati; inizia con i nodi di animazione per locomozione, caduta e atterraggio.
Nell'Editor Grafico, fai clic con il tasto destro e seleziona Inserisci Nodo ⟩ Macchina a Stati.

Sul nodo della macchina a stati, fai clic su Apri. Nella vista Macchina a Stati, utilizza Crea Stato per aggiungere tre stati chiamati Locomotion, Fall e LandIdle.

Fai clic su Torna al Grafo e collega i tuoi nodi di animazione agli input corrispondenti della macchina a stati:
- Locomotion: Collega la tua animazione di locomozione. Il grafo di riferimento utilizza un Blend1DNode chiamato IdleRunBlend per fondere le animazioni di inattività e corsa in base a Speed.
- Fall: Collega un ClipNode di caduta e imposta Modalità di Riproduzione su Enum.AnimationNodePlayMode|OnceAndHold, in modo che mantenga la sua posa finale fino a quando il personaggio non atterra.
- LandIdle: Collega un clip di atterraggio e imposta Modalità di Riproduzione su Enum.AnimationNodePlayMode|OnceAndHold, in modo che possa terminare e tornare alla locomozione.
Collega l'output della macchina a stati all'input Pose di Graph Output.

Apri di nuovo la vista Macchina a Stati e trascina una transizione da (Entry) a Locomotion. La macchina a stati inizia in questo stato quando il grafo inizia.

Aggiungi un parametro booleano del grafo chiamato Grounded e impostalo su true. Questo parametro indica se il personaggio è a terra.
Aggiungi le seguenti transizioni trascinando una connessione dallo stato sorgente allo stato di destinazione, quindi configura ciascuna transizione:
- Locomotion a Fall: Imposta Aspetta Per su Espressione, Espressione su not Grounded, e Lunghezza su 0.2 secondi. L'animazione di caduta inizia quando il personaggio lascia il suolo.
- Fall a LandIdle: Imposta Aspetta Per su Espressione, Espressione su Grounded, e Lunghezza su 0.1 secondi. L'animazione di atterraggio inizia quando il personaggio tocca il suolo.
- LandIdle a Locomotion: Imposta Aspetta Per su Finito, Quando su Enum.AnimationNodeTransitionWhen|BeforeFinished, e Lunghezza su 0.2 secondi. La macchina a stati inizia a fondere di nuovo verso la locomozione durante gli ultimi 0.2 secondi dell'animazione di atterraggio.

Lascia Curva come predefinito (Linear) per tutte e tre le transizioni. Visualizza in anteprima il grafo e cambia Grounded su false per entrare in Fall, quindi torna a true per riprodurre LandIdle e tornare a Locomotion.
Aggiorna Grounded dal tuo codice di gioco mentre il personaggio lascia e tocca il suolo. Se la tua fusione di locomozione utilizza Speed, aggiorna quel parametro mentre il personaggio si muove. Per il flusso di lavoro dei parametri, vedi integrazione API.
Estendi la macchina a stati con salti e stati di atterraggio aggiuntivi per creare il grafo di movimento completo. JumpFallLandRunExample include salti separati per stare in piedi e correre, oltre a diversi atterraggi basati su movimento e velocità di caduta.
Proprietà della macchina a stati
Proprietà del nodo della macchina a stati
- Input
- State1...StateN: I nodi di animazione che definiscono ciascuno stato. Il nome dello stato deve corrispondere al nome dell'input al nodo della macchina a stati.
- Proprietà
Proprietà Tipo Descrizione EntryState ObjectValue Un ObjectValue il cui Value punta al AnimationNodeDefinition per lo stato che è attivo quando il grafo inizia. - Dati evento
- Gestione eventi: Gli eventi dallo stato attivo passano attraverso con il loro peso invariato.
- Emissione eventi: Passa attraverso eventi dallo stato attivo solo. Durante una transizione, l'emissione di eventi segue le regole globali degli eventi.
Proprietà di transizione
Una transizione ha uno o più stati sorgente, uno stato di destinazione e una condizione. Quando lo stato attivo corrisponde a uno stato sorgente, la macchina a stati controlla la condizione. Si fonde nello stato di destinazione quando la condizione viene valutata come true.
Aspetta Per determina l'interfaccia della condizione di transizione. Seleziona Espressione (Enum.AnimationNodeWaitFor|Trigger) per visualizzare una casella di Espressione. Un Espressione può fare riferimento direttamente a un parametro booleano del grafo, come ShouldJump, o valutare una condizione, come Speed >= 12. Seleziona Finito (Enum.AnimationNodeWaitFor|Finished) per visualizzare il menu a discesa Quando.
Se più di una transizione ha una Espressione vera, la macchina a stati valuta prima la transizione con il valore di Priorità più alto. Quando le priorità sono le stesse, seleziona una transizione a caso. Assegna priorità diverse alle transizioni in competizione per rendere il risultato prevedibile.
| Proprietà | Tipo | Descrizione |
|---|---|---|
| From | ObjectValue | Un ObjectValue il cui Value punta al AnimationNodeDefinition per lo stato che può iniziare la transizione. Lascia questa proprietà non impostata per una transizione (Any). |
| To | ObjectValue | Un ObjectValue il cui Value punta al AnimationNodeDefinition per lo stato di destinazione. |
| WaitFor | Enum.AnimationNodeWaitFor | Determina quale interfaccia della condizione di transizione appare. Enum.AnimationNodeWaitFor|Trigger visualizza la casella di Espressione. Enum.AnimationNodeWaitFor|Finished visualizza il menu a discesa Quando. |
| Quando | Enum.AnimationNodeTransitionWhen | Disponibile quando Aspetta Per è Finito. Seleziona Enum.AnimationNodeTransitionWhen|Finished per iniziare dopo che lo stato sorgente è finito, o Enum.AnimationNodeTransitionWhen|BeforeFinished per iniziare a fondere un Durata prima che lo stato sorgente finisca. |
| Espressione | Stringa | Disponibile quando Aspetta Per è Espressione. Un parametro booleano del grafo o un'espressione che, quando viene valutata come true, inizia la transizione. Vedi Espressione per cosa è supportato. |
| Priorità | Numero | L'ordine utilizzato quando più di una Espressione è vera. Valori più alti hanno la precedenza. I valori validi vanno da 0 a 65.535. |
| Durata | Numero | Il tempo, in secondi, per fondere nello stato di destinazione. Il predefinito è 0.15 secondi. |
| Curva | Enum.PoseEasingStyle | Il tipo di easing utilizzato durante la fusione. Solo Linear e CubicV2 sono supportati. Il predefinito è Linear. |