Ein Ausdruck ist eine kurze Luau-ähnliche Formel, die Graphparameter liest und einen Wert zurückgibt, wie z.B. math.clamp((MovementSpeed + 0.5) / MaxSpeed, 0, 1). Verwenden Sie Ausdrücke, um eine Knoten-Eigenschaft oder einen Zustandsmaschinenübergang zu steuern. Ausdrücke halten Parametertransformationen und Animationsentscheidungen in Ihrem Graphen, nahe bei den Knoten, die sie steuern.
Voraussetzungen
Bevor Sie einen Ausdruck erstellen, machen Sie sich mit dem Animationsgraf-Editor vertraut, einschließlich wie Sie ihn öffnen und einen Animationsgraf erstellen.
Erstellen eines Ausdrucks
Dieses Beispiel verwendet einen Ausdruck, um die Position-Eigenschaft eines Blend1DNode zu steuern. Konfigurieren Sie den Knoten mit einer Idle-Animation an Position 0 und einer Laufanimation an Position 1. Der Ausdruck wandelt die Bewegungsgeschwindigkeit des Charakters in den Bereich von 0 bis 1 um, den der Knoten verwendet, um zwischen diesen Animationen zu blenden.
Fügen Sie die Zahlen-Graphparameter MovementSpeed und MaxSpeed hinzu.

Ziehen Sie eine Verbindung vom Position-Eigenschaftspin des Blend1DNode und wählen Sie Neuer Ausdruck.

Geben Sie den folgenden Ausdruck ein:
math.clamp(MovementSpeed / MaxSpeed, 0, 1)
Klicken Sie außerhalb des Ausdrucksbereichs, um ihn zu aktualisieren. Wenn MovementSpeed sich in Richtung MaxSpeed erhöht, erhält der Blend1DNode einen Wert von 0 bis 1 und blendet von der Idle-Animation zur Laufanimation.
Nachdem Sie den Graphen auf ein AnimationTrack geladen haben, aktualisieren Sie MovementSpeed und MaxSpeed aus Ihrem Gameplay-Skript mit AnimationTrack:SetParameter(). Das folgende Beispiel verwendet die Eigenschaften MoveDirection und WalkSpeed eines Humanoid:
game:GetService("RunService").Stepped:Connect(function()
animationTrack:SetParameter("MovementSpeed", humanoid.MoveDirection.Magnitude * humanoid.WalkSpeed)
animationTrack:SetParameter("MaxSpeed", humanoid.WalkSpeed)
end)Der Ausdruck wird ausgewertet, während sich die Parameterwerte ändern. Für den Parameterworkflow siehe API-Integration.
Was wird unterstützt
Die Unterstützung für Ausdrücke umfasst arithmetische und Vergleichsoperationen, logische und bedingte Ausdrücke, Aufrufe von Funktionen in der math-Bibliothek, Konstruktion und Mitgliederzugriff für CFrame, Vector2, Vector3 und Color3-Werte sowie die Verkettung von Zeichenfolgen. Die folgenden Abschnitte listen die unterstützte Syntax und Funktionen auf.
Arithmetik und Vergleiche
Verwenden Sie standardmäßige arithmetische und Vergleichsoperationen mit der üblichen Reihenfolge der Operationen. Zum Beispiel, // dividiert und rundet ab.
Speed * 2.0 + Offset
(Health / MaxHealth) * 100
DamageMultiplier ^ 2
Count % 3
10 // 3
Speed < 1
Health >= MaxHealthVergleichsoperatoren funktionieren mit Zahlen. Verwenden Sie == und ~= zum Vergleichen von Zahlen, Booleans oder Zeichenfolgen.
Logik und Kurzschlussauswertung
and, or und not folgen der Wahrheit und der Kurzschlussauswertung von Luau. Nur false und nil werden als falsch betrachtet.
IsGrounded and GroundSpeed or AirSpeed
not IsDisabledIf-then-else-Ausdrücke
Verwenden Sie die bedingte Ausdrucksform von Luau, um innerhalb eines einzelnen Ausdrucks zu verzweigen:
if Speed > 10 then "sprint" elseif Speed > 2 then "run" else "idle"Mathebibliothek
Verwenden Sie die math-Bibliothek. Graphausdrücke unterstützen derzeit nicht math.frexp(), math.noise() oder math.randomseed(). math.modf() gibt derzeit nur den ganzzahligen Teil zurück.
math.clamp(Speed / MaxSpeed, 0, 1)
math.sin(Time * 2 * math.pi)
math.atan2(Direction.Y, Direction.X)
math.max(A, B, C)Vektorkonstruktion und Mitgliederzugriff
Konstruktion von Vector2 und Vector3-Werten, Durchführung von Vektorarithmetik und Zugriff auf Vektormitglieder wie Magnitude und Unit.
Vector3.new(math.cos(Time), math.sin(Time), 0)
Vector2.new(InputX, InputY)
MoveDirection.Magnitude * 2.0
Position.X + Offset
Vector3.zeroColor3-Konstruktion und Mitgliederzugriff
Konstruktion von Color3-Werten und Zugriff auf deren Farbkanäle.
Color3.fromRGB(255, 128, 0)
Color.RCFrame-Konstruktion, Mitgliederzugriff und Operationen
Konstruktion von CFrame-Werten, Zugriff auf CFrame-Mitglieder und Kombination mit CFrames oder Vector3-Werten.
CFrame.new(Position, LookAtPosition)
CFrame.Angles(RotationX, RotationY, RotationZ)
CFrame.identity
Transform.LookVector
Transform.Position + Vector3.new(0, 1, 0)Zeichenfolgenverkettung
Verwenden Sie .., um zwei Zeichenfolgen zu verketten:
"state_" .. CurrentStateLokale Variablen und mehrzeilige Ausdrücke
Verwenden Sie einen mehrzeiligen Ausdruck, um eine Formel in benannte Schritte zu unterteilen. Ein mehrzeiliger Ausdruck unterstützt local-Deklarationen, return, if/elseif/else und eigenständige Ausdrücke. Innerhalb eines if- oder else-Blocks verwenden Sie nur return oder einen eigenständigen Ausdruck; geschachtelte if-Anweisungen und lokale Deklarationen werden nicht unterstützt.
local normalizedSpeed = Speed / MaxSpeed
local eased = math.clamp(normalizedSpeed, 0, 1)
return eased