Un espressione è una breve formula simile a Luau che legge i parametri del grafo e restituisce un valore, come math.clamp((MovementSpeed + 0.5) / MaxSpeed, 0, 1). Usa le espressioni per controllare una proprietà del nodo o una transizione della macchina a stati. Le espressioni mantengono le trasformazioni dei parametri e le decisioni di animazione nel tuo grafo, vicino ai nodi che controllano.
Requisiti
Prima di creare un'espressione, familiarizza con l'Editor del Grafo di Animazione, inclusa la modalità per aprirlo e creare un grafo di animazione.
Crea un'espressione
Questo esempio utilizza un'espressione per controllare la proprietà Posizione di un Blend1DNode. Configura il nodo con un'animazione di inattività alla posizione 0 e un'animazione di corsa alla posizione 1. L'espressione converte la velocità di movimento del personaggio nell'intervallo da 0 a 1 che il nodo utilizza per mescolare tra quelle animazioni.
Aggiungi i parametri del grafo di tipo Numero MovementSpeed e MaxSpeed.

Trascina una connessione dal pin della proprietà Posizione del Blend1DNode e seleziona Nuova Espressione.

Inserisci la seguente espressione:
math.clamp(MovementSpeed / MaxSpeed, 0, 1)
Clicca al di fuori della casella di espressione per aggiornarla. Man mano che MovementSpeed aumenta verso MaxSpeed, il Blend1DNode riceve un valore da 0 a 1 e mescola dall'animazione di inattività all'animazione di corsa.
Dopo aver caricato il grafo su un AnimationTrack, aggiorna MovementSpeed e MaxSpeed dal tuo script di gioco con AnimationTrack:SetParameter(). Il seguente esempio utilizza le proprietà MoveDirection e WalkSpeed di un Humanoid:
game:GetService("RunService").Stepped:Connect(function()
animationTrack:SetParameter("MovementSpeed", humanoid.MoveDirection.Magnitude * humanoid.WalkSpeed)
animationTrack:SetParameter("MaxSpeed", humanoid.WalkSpeed)
end)L'espressione viene valutata man mano che i valori dei parametri cambiano. Per il flusso di lavoro dei parametri, vedere Integrazione API.
Cosa è supportato
Il supporto per le espressioni include operazioni aritmetiche e di confronto, espressioni logiche e condizionali, chiamate a funzioni nella libreria math, costruzione e accesso ai membri per i valori CFrame, Vector2, Vector3 e Color3, e concatenazione di stringhe. Le sezioni seguenti elencano la sintassi e le funzioni supportate.
Aritmetica e confronti
Usa le normali operazioni aritmetiche e di confronto, con il consueto ordine delle operazioni. Ad esempio, // divide e arrotonda per difetto.
Speed * 2.0 + Offset
(Health / MaxHealth) * 100
DamageMultiplier ^ 2
Count % 3
10 // 3
Speed < 1
Health >= MaxHealthGli operatori di confronto funzionano con i numeri. Usa == e ~= per confrontare numeri, booleani o stringhe.
Logica e short-circuiting
and, or e not seguono la verità di Luau e la valutazione short-circuit. Solo false e nil sono considerati falsi.
IsGrounded and GroundSpeed or AirSpeed
not IsDisabledEspressioni if-then-else
Usa la forma di espressione condizionale di Luau per ramificare all'interno di un'unica espressione:
if Speed > 10 then "sprint" elseif Speed > 2 then "run" else "idle"Libreria matematica
Usa la libreria math. Le espressioni del grafo non supportano ancora math.frexp(), math.noise() o math.randomseed(). math.modf() attualmente restituisce solo la porzione intera.
math.clamp(Speed / MaxSpeed, 0, 1)
math.sin(Time * 2 * math.pi)
math.atan2(Direction.Y, Direction.X)
math.max(A, B, C)Costruzione di vettori e accesso ai membri
Costruisci valori Vector2 e Vector3, esegui operazioni vettoriali e accedi ai membri del vettore come Magnitude e Unit.
Vector3.new(math.cos(Time), math.sin(Time), 0)
Vector2.new(InputX, InputY)
MoveDirection.Magnitude * 2.0
Position.X + Offset
Vector3.zeroCostruzione di Color3 e accesso ai membri
Costruisci valori Color3 e accedi ai loro canali di colore.
Color3.fromRGB(255, 128, 0)
Color.RCostruzione di CFrame, accesso ai membri e operazioni
Costruisci valori CFrame, accedi ai membri di CFrame e combinati con CFrames o valori Vector3.
CFrame.new(Position, LookAtPosition)
CFrame.Angles(RotationX, RotationY, RotationZ)
CFrame.identity
Transform.LookVector
Transform.Position + Vector3.new(0, 1, 0)Concatenazione di stringhe
Usa .. per concatenare due stringhe:
"state_" .. CurrentStateVariabili locali ed espressioni multi-linea
Usa un'espressione multi-linea per suddividere una formula in passaggi nominati. Un'espressione multi-linea supporta dichiarazioni local, return, if/elseif/else e espressioni autonome. All'interno di un corpo if o else, usa solo return o un'espressione autonoma; le dichiarazioni if annidate e le dichiarazioni locali non sono supportate.
local normalizedSpeed = Speed / MaxSpeed
local eased = math.clamp(normalizedSpeed, 0, 1)
return eased