Sebuah ekspresi adalah rumus pendek seperti Luau yang membaca parameter grafik dan mengembalikan nilai, seperti math.clamp((MovementSpeed + 0.5) / MaxSpeed, 0, 1). Gunakan ekspresi untuk menggerakkan properti node atau transisi mesin keadaan. Ekspresi menjaga transformasi parameter dan keputusan animasi dalam grafik Anda, dekat dengan node yang mereka gerakkan.
Prasyarat
Sebelum Anda membuat ekspresi, kenali diri Anda dengan Editor Grafik Animasi, termasuk cara membukanya dan membuat grafik animasi.
Buat ekspresi
Contoh ini menggunakan ekspresi untuk menggerakkan properti Posisi dari Blend1DNode. Konfigurasikan node dengan animasi diam pada posisi 0 dan animasi berlari pada posisi 1. Ekspresi mengubah kecepatan gerak karakter menjadi rentang 0 hingga 1 yang digunakan node untuk mencampur antara animasi tersebut.
Tambahkan parameter grafik Number MovementSpeed dan MaxSpeed.

Seret koneksi dari pin properti Posisi dari Blend1DNode dan pilih Ekspresi Baru.

Masukkan ekspresi berikut:
math.clamp(MovementSpeed / MaxSpeed, 0, 1)
Klik di luar kotak ekspresi untuk menyegarkannya. Saat MovementSpeed meningkat menuju MaxSpeed, Blend1DNode menerima nilai dari 0 hingga 1 dan mencampur dari animasi diam ke animasi berlari.
Setelah Anda memuat grafik ke dalam AnimationTrack, perbarui MovementSpeed dan MaxSpeed dari skrip permainan Anda dengan AnimationTrack:SetParameter(). Contoh berikut menggunakan properti MoveDirection dan WalkSpeed dari Humanoid:
game:GetService("RunService").Stepped:Connect(function()
animationTrack:SetParameter("MovementSpeed", humanoid.MoveDirection.Magnitude * humanoid.WalkSpeed)
animationTrack:SetParameter("MaxSpeed", humanoid.WalkSpeed)
end)Ekspresi dievaluasi saat nilai parameter berubah. Untuk alur kerja parameter, lihat integrasi API.
Apa yang didukung
Dukungan ekspresi mencakup operasi aritmatika dan perbandingan, ekspresi logis dan kondisional, panggilan ke fungsi dalam pustaka math, konstruksi dan akses anggota untuk nilai CFrame, Vector2, Vector3, dan Color3, serta penggabungan string. Bagian berikut mencantumkan sintaks dan fungsi yang didukung.
Aritmatika dan perbandingan
Gunakan operasi aritmatika dan perbandingan standar, dengan urutan operasi yang biasa. Misalnya, // membagi dan membulatkan ke bawah.
Speed * 2.0 + Offset
(Health / MaxHealth) * 100
DamageMultiplier ^ 2
Count % 3
10 // 3
Speed < 1
Health >= MaxHealthOperator perbandingan bekerja dengan angka. Gunakan == dan ~= untuk membandingkan angka, boolean, atau string.
Logika dan pemotongan pendek
and, or, dan not mengikuti kebenaran Luau dan evaluasi pemotongan pendek. Hanya false dan nil yang dianggap salah.
IsGrounded and GroundSpeed or AirSpeed
not IsDisabledEkspresi if-then-else
Gunakan bentuk ekspresi kondisional Luau untuk bercabang dalam satu ekspresi:
if Speed > 10 then "sprint" elseif Speed > 2 then "run" else "idle"Pustaka matematika
Gunakan pustaka math. Ekspresi grafik belum mendukung math.frexp(), math.noise(), atau math.randomseed(). math.modf() saat ini hanya mengembalikan bagian integer.
math.clamp(Speed / MaxSpeed, 0, 1)
math.sin(Time * 2 * math.pi)
math.atan2(Direction.Y, Direction.X)
math.max(A, B, C)Konstruksi vektor dan akses anggota
Konstruksikan nilai Vector2 dan Vector3, lakukan aritmatika vektor, dan akses anggota vektor seperti Magnitude dan Unit.
Vector3.new(math.cos(Time), math.sin(Time), 0)
Vector2.new(InputX, InputY)
MoveDirection.Magnitude * 2.0
Position.X + Offset
Vector3.zeroKonstruksi Color3 dan akses anggota
Konstruksikan nilai Color3 dan akses saluran warnanya.
Color3.fromRGB(255, 128, 0)
Color.RKonstruksi CFrame, akses anggota, dan operasi
Konstruksikan nilai CFrame, akses anggota CFrame, dan gabungkan dengan CFrame atau nilai Vector3.
CFrame.new(Position, LookAtPosition)
CFrame.Angles(RotationX, RotationY, RotationZ)
CFrame.identity
Transform.LookVector
Transform.Position + Vector3.new(0, 1, 0)Penggabungan string
Gunakan .. untuk menggabungkan dua string:
"state_" .. CurrentStateVariabel lokal dan ekspresi multi-baris
Gunakan ekspresi multi-baris untuk memecah rumus menjadi langkah-langkah bernama. Ekspresi multi-baris mendukung deklarasi local, return, if/elseif/else, dan ekspresi mandiri. Di dalam tubuh if atau else, gunakan hanya return atau ekspresi mandiri; pernyataan if bersarang dan deklarasi lokal tidak didukung.
local normalizedSpeed = Speed / MaxSpeed
local eased = math.clamp(normalizedSpeed, 0, 1)
return eased