AnimationTrack

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat

Mengontrol pemutaran animasi di Animator . Objek ini tidak dapat dibuat, sebaliknya dikembalikan oleh metode Animator:LoadAnimation() .

Rangkuman

Properti

  • Hanya Baca
    Tidak Direplikasi
    Baca Paralel

    Objek Animation yang digunakan untuk membuat ini AnimationTrack .

  • Hanya Baca
    Tidak Direplikasi
    Baca Paralel

    Properti hanya baca yang kembali benar ketika AnimationTrack bermain.

  • Hanya Baca
    Tidak Direplikasi
    Baca Paralel

    Properti hanya baca yang mengembalikan panjang (dalam detik) dari AnimationTrack .Ini akan kembali 0 sampai animasi telah sepenuhnya dimuat dan dengan demikian mungkin tidak tersedia segera.

  • Baca Paralel

    Mengatur apakah animasi akan diulang setelah selesai. Jika diubah saat bermain hasilnya akan berlaku setelah animasi selesai.

  • Mengatur prioritas dari AnimationTrack .Tergantung pada apa yang ditetapkan, bermain banyak animasi sekaligus akan melihat properti ini untuk menentukan mana Class.Keyframe``Class.Pose|Poses yang harus diputar satu sama lain.

  • Hanya Baca
    Tidak Direplikasi
    Baca Paralel

    Kecepatan dari AnimationTrack adalah properti hanya baca yang memberikan kecepatan bermain saat ini dari AnimationTrack .Ini memiliki nilai default 1.Ketika kecepatan sama dengan 1, jumlah waktu yang dibutuhkan untuk menyelesaikan animasi adalah sama dengan AnimationTrack.Length (dalam detik).

  • Tidak Direplikasi
    Baca Paralel

    Kembalikan posisi dalam waktu dalam detik yang sebuah AnimationTrack melalui memainkan animasi sumbernya.Dapat ditetapkan untuk membuat lintasan melompat ke momen tertentu dalam animasi.

  • Hanya Baca
    Tidak Direplikasi
    Baca Paralel

    Properti hanya baca yang memberikan berat saat ini dari AnimationTrack. Ini memiliki nilai default 1.

  • Hanya Baca
    Tidak Direplikasi
    Baca Paralel

    Properti hanya baca yang memberikan berat saat ini dari AnimationTrack .

Metode

Acara

Properti

Animation

Hanya Baca
Tidak Direplikasi
Baca Paralel

Objek Animation yang digunakan untuk membuat ini AnimationTrack .Untuk membuat AnimationTrack , Anda harus memuat objek Animation ke dalam Animator menggunakan metode Animator:LoadAnimation().

Contoh Kode

Contoh kode berikut mencetak nama animasi setiap kali AnimationTrack dimainkan di Humanoid.Skrip ini dapat ditempatkan dalam model dengan anak Humanoid .

Dengarkan Animasi Baru

local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
animator.AnimationPlayed:Connect(function(animationTrack)
local animationName = animationTrack.Animation.Name
print("Animation playing " .. animationName)
end)

IsPlaying

Hanya Baca
Tidak Direplikasi
Baca Paralel

Properti hanya baca yang kembali benar ketika AnimationTrack bermain.

Properti ini dapat digunakan oleh pengembang untuk memeriksa apakah animasi sudah diputar sebelum dimainkan (karena itu akan menyebabkan mulai ulang).Jika seorang pengembang ingin mendapatkan semua bermain AnimationTracks di sebuah Animator atau a Humanoid , mereka harus menggunakan Animator:GetPlayingAnimationTracks()

Contoh Kode

Sampel kode ini mencakup fungsi sederhana yang akan memainkan AnimationTrack jika tidak dimainkan, atau sebaliknya menyesuaikan kecepatan dan beratnya untuk mencocokkan parameter baru yang diberikan.

AnimasiTrack Sedang Dimainkan

local function playOrAdjust(animationTrack, fadeTime, weight, speed)
if not animationTrack.IsPlaying then
animationTrack:Play(fadeTime, weight, speed)
else
animationTrack:AdjustSpeed(speed)
animationTrack:AdjustWeight(weight, fadeTime)
end
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playOrAdjust(animationTrack, 1, 0.6, 1)

Length

Hanya Baca
Tidak Direplikasi
Baca Paralel

Properti hanya baca yang mengembalikan panjang (dalam detik) dari AnimationTrack .Ini akan kembali 0 sampai animasi telah sepenuhnya dimuat dan dengan demikian mungkin tidak tersedia segera.

Ketika AnimationTrack.Speed dari AnimationTrack sama dengan 1, animasi akan membutuhkan waktu AnimationTrack.Length (dalam detik) untuk diselesaikan.

Contoh Kode

Fungsi berikut akan memainkan AnimationTrack untuk durasi tertentu.Ini dilakukan dengan mengubah kecepatan animasi ke panjang animasi dibagi dengan durasi bermain yang diinginkan.Ini bisa digunakan dalam situasi di mana seorang pengembang ingin memainkan animasi standar untuk durasi yang berbeda (misalnya, mengisi ulang kemampuan yang berbeda).

Memutar Animasi untuk Durasi Tertentu

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)

Looped

Baca Paralel

Properti ini menetapkan apakah animasi akan diulang setelah selesai.Jika diubah saat bermain hasilnya akan berlaku setelah animasi selesai.

Properti Looped untuk AnimationTrack default ke cara diatur di editor animasi.Namun properti ini dapat diubah, memungkinkan kontrol atas AnimationTrack saat permainan berjalan.Looped juga dengan benar menangani animasi yang diputar terbalik (negatif AnimationTrack.Speed ).Setelah keyframe pertama tercapai, itu akan dimulai ulang di keyframe terakhir.

Properti ini memungkinkan pengembang untuk memiliki varian luring dan tidak luring dari animasi yang sama, tanpa perlu mengunggah dua versi ke Roblox.

Contoh Kode

Animasi dalam contoh ini biasanya berulang.Setelah pemain dan animasi dimuat, animasi dimainkan dalam mode non-looped lalu dalam mode looped.

Pengulangan Animasi

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507770453"
local animationTrack = animator:LoadAnimation(animation)
animationTrack.Looped = false
task.wait(3)
animationTrack:Play()
task.wait(4)
animationTrack.Looped = true
animationTrack:Play()

Fungsi dalam contoh kode ini akan memainkan AnimationTrack di loop, untuk jumlah loop tertentu, sebelum menghentikan animasi.

Dalam beberapa kasus, pengembang mungkin ingin menghentikan animasi berulang setelah jumlah loop tertentu selesai, bukan setelah jumlah waktu tertentu.Di sinilah acara DidLoop dapat digunakan.

Mainkan Animasi Track untuk Beberapa Lingkaran

local function playForNumberLoops(animationTrack, number)
animationTrack.Looped = true
animationTrack:Play()
local numberOfLoops = 0
local connection = nil
connection = animationTrack.DidLoop:Connect(function()
numberOfLoops = numberOfLoops + 1
print("loop: ", numberOfLoops)
if numberOfLoops >= number then
animationTrack:Stop()
connection:Disconnect() -- penting untuk memutus koneksi saat mereka tidak lagi dibutuhkan
end
end)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playForNumberLoops(animationTrack, 5)
Baca Paralel

Properti ini menetapkan prioritas dari AnimationTrack .Tergantung pada apa yang ditetapkan, bermain banyak animasi sekaligus akan melihat properti ini untuk menentukan mana Class.Keyframe``Class.Pose|Poses yang harus diputar satu sama lain.

Properti Prioritas untuk default ke cara diatur dan dipublikasikan dari Editor Animasi Studio .Ini menggunakan Enum.AnimationPriority yang memiliki 7 tingkat prioritas:

  1. Aksi4 (prioritas tertinggi)
  2. Aksi 3
  3. Aksi 2
  4. Tindakan
  5. Gerakan
  6. Menganggur
  7. Inti (prioritas terendah)

Mengatur prioritas animasi dengan benar, baik melalui editor atau melalui properti ini, memungkinkan banyak animasi dimainkan tanpa bertabrakan.Di mana dua animasi bermain mengarahkan target untuk memindahkan anggota tubuh yang sama dengan cara yang berbeda, AnimationTrack dengan prioritas tertinggi akan tampilkan.Jika kedua animasi memiliki prioritas yang sama, berat trek akan digunakan untuk menggabungkan animasi.

Properti ini juga memungkinkan pengembang untuk memutar animasi yang sama pada prioritas yang berbeda, tanpa perlu mengunggah versi tambahan ke Roblox.

Speed

Hanya Baca
Tidak Direplikasi
Baca Paralel

Kecepatan dari AnimationTrack adalah properti hanya baca yang memberikan kecepatan bermain saat ini dari AnimationTrack .Ini memiliki nilai default 1.Ketika kecepatan sama dengan 1, jumlah waktu yang dibutuhkan untuk menyelesaikan animasi adalah sama dengan AnimationTrack.Length (dalam detik).

Jika kecepatan disesuaikan, maka waktu yang sebenarnya dibutuhkan untuk memainkan trek dapat dihitung dengan membagi panjang dengan kecepatan.Kecepatan adalah jumlah tanpa unit.

Kecepatan dapat digunakan untuk menautkan panjang animasi ke berbagai acara permainan (misalnya mengisi ulang kemampuan) tanpa harus mengunggah variasi yang berbeda dari animasi yang sama.

Properti ini hanya dibaca, dan Anda dapat mengubahnya menggunakan AnimationTrack:AdjustSpeed() .

Contoh Kode

Dalam contoh ini, pemain dan animasi dimuat.Panjang Trek Animasi menentukan berapa lama trek akan dimainkan jika kecepatannya adalah 1.Jika kecepatan disesuaikan, maka waktu yang sebenarnya dibutuhkan untuk memainkan trek dapat dihitung dengan membagi panjang dengan kecepatan.

Kecepatan Animasi

local ContentProvider = game:GetService("ContentProvider")
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507770453"
ContentProvider:PreloadAsync({ animation })
local animationTrack = animator:LoadAnimation(animation)
local normalSpeedTime = animationTrack.Length / animationTrack.Speed
animationTrack:AdjustSpeed(3)
local fastSpeedTime = animationTrack.Length / animationTrack.Speed
print("At normal speed the animation will play for", normalSpeedTime, "seconds")
print("At 3x speed the animation will play for", fastSpeedTime, "seconds")

Fungsi berikut akan memainkan AnimationTrack untuk durasi tertentu.Ini dilakukan dengan mengubah kecepatan animasi ke panjang animasi dibagi dengan durasi bermain yang diinginkan.Ini bisa digunakan dalam situasi di mana seorang pengembang ingin memainkan animasi standar untuk durasi yang berbeda (misalnya, mengisi ulang kemampuan yang berbeda).

Memutar Animasi untuk Durasi Tertentu

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)

TimePosition

Tidak Direplikasi
Baca Paralel

Kembalikan posisi dalam waktu dalam detik yang sebuah AnimationTrack melalui memainkan animasi sumbernya.Dapat ditetapkan untuk membuat lintasan melompat ke momen tertentu dalam animasi.

Posisi Waktu dapat ditetapkan untuk pergi ke titik tertentu dalam animasi, tetapi AnimationTrack harus diputar untuk melakukannya.Ini juga dapat digunakan bersama dengan AnimationTrack:AdjustSpeed() untuk membekukan animasi di titik yang diinginkan (dengan menetapkan kecepatan menjadi 0).

Contoh Kode

Contoh kode berikut termasuk dua fungsi yang menunjukkan bagaimana AdjustSpeed dan TimePosition dapat digunakan untuk membekukan animasi di titik tertentu.

Fungsi pertama membekukan animasi di titik tertentu dalam waktu (didefinisikan dalam detik).Yang kedua membeku di sana pada persentase (antara 0 atau 100) dengan membagi persentase dengan panjang trek.

Karena TimePosition tidak dapat digunakan saat AnimationTrack tidak diputar, fungsi memeriksa untuk memastikan animasi diputar sebelum melanjutkan.

Membekukan Animasi di Posisi

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Mainkan animasi jika tidak bermain
animationTrack:Play()
end
-- Atur kecepatan menjadi 0 untuk membekukan animasi
animationTrack:AdjustSpeed(0)
-- Lompat ke Posisi Waktu yang diinginkan
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Mainkan animasi jika tidak bermain
animationTrack:Play()
end
-- Atur kecepatan menjadi 0 untuk membekukan animasi
animationTrack:AdjustSpeed(0)
-- Lompat ke Posisi Waktu yang diinginkan
animationTrack.TimePosition = (percentagePosition / 100) * animationTrack.Length
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
freezeAnimationAtTime(animationTrack, 0.5)
freezeAnimationAtPercent(animationTrack, 50)

WeightCurrent

Hanya Baca
Tidak Direplikasi
Baca Paralel

Ketika berat ditetapkan dalam AnimationTrack itu tidak berubah secara instan tetapi bergerak dari WeightCurrent ke AnimationTrack.WeightTarget .Waktu yang dibutuhkan untuk melakukan ini ditentukan oleh parameter fadeTime yang diberikan saat animasi diputar, atau berat disesuaikan.

WeightCurrent dapat diperiksa terhadap AnimationTrack.WeightTarget untuk melihat apakah berat yang diinginkan telah tercapai.Perhatikan bahwa nilai-nilai ini tidak boleh diperiksa untuk kesamaan dengan operator ==, karena kedua nilai ini adalah float.Untuk melihat apakah WeightCurrent telah mencapai berat target, disarankan untuk melihat apakah jarak antara nilai-nilai tersebut cukup kecil (lihat sampel kode di bawah ini).

Sistem penimbangan animasi digunakan untuk menentukan bagaimana AnimationTracks bermain dengan prioritas yang sama dicampur bersama.Berat default adalah satu, dan tidak ada gerakan yang terlihat pada AnimationTrack dengan berat nol.Posisi yang ditampilkan pada titik waktu tertentu ditentukan oleh rata-rata berat semua Poses dan WeightCurrent dari masing-masing AnimationTrack .Dalam kebanyakan kasus, animasi blending tidak diperlukan dan menggunakan AnimationTrack.Priority lebih cocok.

Contoh Kode

Contoh kode ini memuat dua animasi ke Humanoid lokal pemain dan menunjukkan bagaimana parameter fadeTime di AnimationTrack.Play menentukan berapa lama waktu yang dibutuhkan untuk AnimationTrack's WeightCurrent mencapai Target Beratnya.

Karena WeightCurrent dan WeightTarget adalah mengapung == operator tidak dapat digunakan untuk membandingkan, sebaliknya lebih tepat untuk memeriksa apakah perbedaan antara mereka cukup kecil untuk menganggap penurunan berat telah selesai.

WeightCurrent dan WeightTarget

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation1 = Instance.new("Animation")
animation1.AnimationId = "rbxassetid://507770453"
local animation2 = Instance.new("Animation")
animation2.AnimationId = "rbxassetid://507771019"
task.wait(3) -- waktu tunggu acak untuk memungkinkan karakter jatuh ke tempat
local animationTrack1 = animator:LoadAnimation(animation1)
local animationTrack2 = animator:LoadAnimation(animation2)
animationTrack1.Priority = Enum.AnimationPriority.Movement
animationTrack2.Priority = Enum.AnimationPriority.Action
animationTrack1:Play(0.1, 5, 1)
animationTrack2:Play(10, 3, 1)
local done = false
while not done and task.wait(0.1) do
if math.abs(animationTrack2.WeightCurrent - animationTrack2.WeightTarget) < 0.001 then
print("got there")
done = true
end
end

WeightTarget

Hanya Baca
Tidak Direplikasi
Baca Paralel

AnimationTrack.WeightTarget adalah properti hanya baca yang memberikan berat saat ini dari AnimationTrack.Ini memiliki nilai default 1 dan diatur saat AnimationTrack:Play() , AnimationTrack:Stop() atau AnimationTrack:AdjustWeight() dipanggil.Ketika berat ditetapkan dalam AnimationTrack itu tidak berubah secara instan tetapi bergerak dari WeightCurrent ke AnimationTrack.WeightTarget .Waktu yang dibutuhkan untuk melakukan ini ditentukan oleh parameter fadeTime yang diberikan saat animasi diputar, atau berat disesuaikan.

WeightCurrent dapat diperiksa terhadap AnimationTrack.WeightTarget untuk melihat apakah berat yang diinginkan telah tercapai.Perhatikan bahwa nilai-nilai ini tidak boleh diperiksa untuk kesamaan dengan operator ==, karena kedua nilai ini adalah float.Untuk melihat apakah WeightCurrent telah mencapai berat target, disarankan untuk melihat apakah jarak antara nilai-nilai tersebut cukup kecil (lihat sampel kode di bawah ini).

Sistem penimbangan animasi digunakan untuk menentukan bagaimana AnimationTracks bermain dengan prioritas yang sama dicampur bersama.Berat default adalah satu, dan tidak ada gerakan yang terlihat pada AnimationTrack dengan berat nol.Posisi yang ditampilkan pada titik waktu tertentu ditentukan oleh rata-rata berat semua Poses dan WeightCurrent dari masing-masing AnimationTrack .Dalam kebanyakan kasus, animasi blending tidak diperlukan dan menggunakan AnimationTrack.Priority lebih cocok.

Contoh Kode

Contoh kode ini memuat dua animasi ke Humanoid lokal pemain dan menunjukkan bagaimana parameter fadeTime di AnimationTrack.Play menentukan berapa lama waktu yang dibutuhkan untuk AnimationTrack's WeightCurrent mencapai Target Beratnya.

Karena WeightCurrent dan WeightTarget adalah mengapung == operator tidak dapat digunakan untuk membandingkan, sebaliknya lebih tepat untuk memeriksa apakah perbedaan antara mereka cukup kecil untuk menganggap penurunan berat telah selesai.

WeightCurrent dan WeightTarget

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation1 = Instance.new("Animation")
animation1.AnimationId = "rbxassetid://507770453"
local animation2 = Instance.new("Animation")
animation2.AnimationId = "rbxassetid://507771019"
task.wait(3) -- waktu tunggu acak untuk memungkinkan karakter jatuh ke tempat
local animationTrack1 = animator:LoadAnimation(animation1)
local animationTrack2 = animator:LoadAnimation(animation2)
animationTrack1.Priority = Enum.AnimationPriority.Movement
animationTrack2.Priority = Enum.AnimationPriority.Action
animationTrack1:Play(0.1, 5, 1)
animationTrack2:Play(10, 3, 1)
local done = false
while not done and task.wait(0.1) do
if math.abs(animationTrack2.WeightCurrent - animationTrack2.WeightTarget) < 0.001 then
print("got there")
done = true
end
end

Metode

AdjustSpeed

()

Fungsi ini mengubah AnimationTrack.Speed dari animasi.Nilai positif untuk kecepatan memutar animasi ke depan, negatif memainkannya ke belakang, dan 0 menghentikannya.

Kecepatan awal AnimasiTrack ditetapkan sebagai parameter di AnimationTrack:Play() .Namun kecepatan trek dapat diubah selama pemutaran, menggunakan AdjustSpeed.Ketika kecepatan sama dengan 1, jumlah waktu yang dibutuhkan untuk menyelesaikan animasi adalah sama dengan AnimationTrack.Length (dalam detik).

Kapan disesuaikan, maka waktu yang sebenarnya dibutuhkan untuk bermain bisa dihitung dengan membagi panjang dengan kecepatan. Kecepatan adalah jumlah tanpa unit.

Kecepatan dapat digunakan untuk menautkan panjang animasi ke berbagai acara permainan (misalnya mengisi ulang kemampuan) tanpa harus mengunggah variasi yang berbeda dari animasi yang sama.

Parameter

speed: number

Kecepatan putar animasi yang harus diubah.

Nilai Default: 1

Memberikan nilai

()

Contoh Kode

Fungsi berikut akan memainkan AnimationTrack untuk durasi tertentu.Ini dilakukan dengan mengubah kecepatan animasi ke panjang animasi dibagi dengan durasi bermain yang diinginkan.Ini bisa digunakan dalam situasi di mana seorang pengembang ingin memainkan animasi standar untuk durasi yang berbeda (misalnya, mengisi ulang kemampuan yang berbeda).

Memutar Animasi untuk Durasi Tertentu

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)

Dalam contoh ini, pemain dan animasi dimuat.Panjang Trek Animasi menentukan berapa lama trek akan dimainkan jika kecepatannya adalah 1.Jika kecepatan disesuaikan, maka waktu yang sebenarnya dibutuhkan untuk memainkan trek dapat dihitung dengan membagi panjang dengan kecepatan.

Kecepatan Animasi

local ContentProvider = game:GetService("ContentProvider")
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507770453"
ContentProvider:PreloadAsync({ animation })
local animationTrack = animator:LoadAnimation(animation)
local normalSpeedTime = animationTrack.Length / animationTrack.Speed
animationTrack:AdjustSpeed(3)
local fastSpeedTime = animationTrack.Length / animationTrack.Speed
print("At normal speed the animation will play for", normalSpeedTime, "seconds")
print("At 3x speed the animation will play for", fastSpeedTime, "seconds")

AdjustWeight

()

Mengubah berat animasi, dengan parameter fadeTime opsional yang menentukan berapa lama waktu yang dibutuhkan untuk AnimationTrack.WeightCurrent mencapai AnimationTrack.WeightTarget.

Ketika berat ditetapkan dalam AnimationTrack itu tidak berubah secara instan tetapi bergerak dari WeightCurrent ke AnimationTrack.WeightTarget .Waktu yang dibutuhkan untuk melakukan ini ditentukan oleh parameter fadeTime yang diberikan saat animasi diputar, atau berat disesuaikan.

WeightCurrent dapat diperiksa terhadap AnimationTrack.WeightTarget untuk melihat apakah berat yang diinginkan telah tercapai.Perhatikan bahwa nilai-nilai ini tidak boleh diperiksa untuk kesamaan dengan operator ==, karena kedua nilai ini adalah float.Untuk melihat apakah WeightCurrent telah mencapai berat target, disarankan untuk melihat apakah jarak antara nilai-nilai tersebut cukup kecil (lihat sampel kode di bawah ini).

Sistem penimbangan animasi digunakan untuk menentukan bagaimana AnimationTracks bermain dengan prioritas yang sama dicampur bersama.Berat default adalah satu, dan tidak ada gerakan yang terlihat pada AnimationTrack dengan berat nol.Posisi yang ditampilkan pada titik waktu tertentu ditentukan oleh rata-rata berat semua Poses dan WeightCurrent dari masing-masing AnimationTrack .Lihat di bawah ini untuk contoh pencampuran animasi dalam praktik.Dalam kebanyakan kasus, animasi blending tidak diperlukan dan menggunakan AnimationTrack.Priority lebih cocok.

Parameter

weight: number

Berat animasi yang harus diubah menjadi.

Nilai Default: 1
fadeTime: number

Durasi waktu yang akan memudar animasi antara berat lama dan berat baru untuk.

Nilai Default: 0.100000001

Memberikan nilai

()

Contoh Kode

Sampel kode ini mencakup fungsi yang mengubah berat AnimasiTrack dan menghasilkan sampai beratnya berubah menjadi berat target baru.

Tujuan sampel ini adalah untuk menunjukkan bagaimana parameter fadeTime dari AnimationTrack.AdjustWeight bekerja.Dalam kebanyakan kasus, jika seorang pengembang ingin menghasilkan lebih dari waktu pudar, disarankan untuk menggunakan wait(fadeTime).

Perubahan Berat Pelacak Animasi

local function changeWeight(animationTrack, weight, fadeTime)
animationTrack:AdjustWeight(weight, fadeTime)
local startTime = tick()
while math.abs(animationTrack.WeightCurrent - weight) > 0.001 do
task.wait()
end
print("Time taken to change weight " .. tostring(tick() - startTime))
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
changeWeight(animationTrack, 0.6, 1)

GetMarkerReachedSignal

Fungsi ini mengembalikan event serupa dengan peristiwa AnimationTrack.KeyframeReached , kecuali hanya menembak ketika sebuah KeyframeMarker tertentu telah dipukul di sebuah animation .Perbedaan memungkinkan kontrol yang lebih besar kapan acara akan ditembak.

Untuk mempelajari lebih lanjut tentang menggunakan fungsi ini, lihat Peristiwa Animasi di artikel Editor Animasi.

Lihat juga:

Parameter

name: string

Nama dari KeyframeMarker sinyal yang dibuat untuk. Jangan dikacaukan dengan nama dari Keyframe.

Nilai Default: ""

Memberikan nilai

Sinyal yang dibuat dan ditembak ketika animasi mencapai yang dibuat KeyframeMarker . Jangan bingung dengan nama Keyframe .

Contoh Kode

This LocalScript code waits for the local player's Humanoid object to load, then it creates a new Animation instance with the proper Animation.AnimationId. The animation is then loaded onto the humanoid, creating an AnimationTrack, and the track is played with AnimationTrack:Play(). Following that, the AnimationTrack:GetMarkerReachedSignal() function detects when the "KickEnd" marker is hit.

Listening to Keyframe Markers

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.Character:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Create new "Animation" instance
local kickAnimation = Instance.new("Animation")
-- Set its "AnimationId" to the corresponding animation asset ID
kickAnimation.AnimationId = "rbxassetid://2515090838"
-- Load animation onto the humanoid
local kickAnimationTrack = humanoid:LoadAnimation(kickAnimation)
-- Play animation track
kickAnimationTrack:Play()
-- If a named event was defined for the animation, connect it to "GetMarkerReachedSignal()"
kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString)
print(paramString)
end)

GetTargetInstance

Parameter

name: string
Nilai Default: ""

Memberikan nilai

GetTargetNames


Memberikan nilai

GetTimeOfKeyframe

Kembalikan posisi waktu dari yang pertama Keyframe dari nama yang diberikan di dalam AnimationTrack .Jika beberapa Keyframes berbagi nama yang sama, itu akan mengembalikan yang paling awal di animasi.

Fungsi ini akan mengembalikan kesalahan jika digunakan dengan nama keyframe yang tidak valid (yang tidak ada misalnya) atau jika dasar Animation belum dimuat.Untuk mengatasi ini pastikan hanya nama keyframe yang benar yang digunakan dan animasi telah dimuat sebelum memanggil fungsi ini.

Untuk memeriksa apakah animasi telah dimuat, verifikasikan bahwa AnimationTrack.Length adalah lebih besar dari nol.

Parameter

keyframeName: string

Nama yang terkait dengan Keyframe untuk ditemukan.

Nilai Default: ""

Memberikan nilai

Waktu, dalam detik, Keyframe terjadi pada kecepatan bermain normal.

Contoh Kode

Sampel ini mencakup fungsi yang akan melompat ke keyframe pertama dari nama yang ditentukan di AnimationTrack.

Sebagai AnimationTrack.TimePosition tidak dapat ditetapkan saat animasi tidak memainkan fungsi pertama untuk melihat apakah animasi dimainkan.

Sampel ini hanya akan berfungsi setelah Animasi dimuat.

Lompat ke Keyframe

local function jumpToKeyframe(animationTrack, keyframeName)
local timePosition = animationTrack:GetTimeOfKeyframe(keyframeName)
if not animationTrack.IsPlaying then
animationTrack:Play()
end
animationTrack.TimePosition = timePosition
end
local ANIMATION_ID = 0
local KEYFRAME_NAME = "Test"
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://" .. ANIMATION_ID
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
jumpToKeyframe(animationTrack, KEYFRAME_NAME)

Play

()

Ketika AnimationTrack:Play() dipanggil, animasi trek akan mulai dimainkan dan berat animasi akan meningkat dari 0 ke berat yang ditentukan (默认值 1) selama waktu fadeTime yang ditentukan (默认值 0.1).

Kecepatan yang akan dimainkan oleh AnimationTrack adalah ditentukan oleh parameter kecepatan (default ke 1).Ketika kecepatannya sama dengan 1, jumlah detik yang dibutuhkan untuk menyelesaikan sama dengan properti trek AnimationTrack.Length.Sebagai contoh, kecepatan 2 akan menyebabkan trek dimainkan dua kali lebih cepat.

Berat dan kecepatan animasi juga dapat diubah setelah animasi mulai bermain menggunakan metode AnimationTrack:AdjustWeight() dan AnimationTrack:AdjustSpeed().

Jika pengembang ingin memulai animasi di titik tertentu menggunakan AnimationTrack.TimePosition, penting agar animasi diputar sebelum ini dilakukan.

Parameter

fadeTime: number

Durasi waktu yang berat animasi seharusnya memudar dalam.

Nilai Default: 0.100000001
weight: number

Berat animasi yang akan diputar.

Nilai Default: 1
speed: number

Kecepatan putar animasi.

Nilai Default: 1

Memberikan nilai

()

Contoh Kode

Fungsi berikut akan memainkan AnimationTrack untuk durasi tertentu.Ini dilakukan dengan mengubah kecepatan animasi ke panjang animasi dibagi dengan durasi bermain yang diinginkan.Ini bisa digunakan dalam situasi di mana seorang pengembang ingin memainkan animasi standar untuk durasi yang berbeda (misalnya, mengisi ulang kemampuan yang berbeda).

Memutar Animasi untuk Durasi Tertentu

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)

Contoh kode berikut termasuk dua fungsi yang menunjukkan bagaimana AdjustSpeed dan TimePosition dapat digunakan untuk membekukan animasi di titik tertentu.

Fungsi pertama membekukan animasi di titik tertentu dalam waktu (didefinisikan dalam detik).Yang kedua membeku di sana pada persentase (antara 0 atau 100) dengan membagi persentase dengan panjang trek.

Karena TimePosition tidak dapat digunakan saat AnimationTrack tidak diputar, fungsi memeriksa untuk memastikan animasi diputar sebelum melanjutkan.

Membekukan Animasi di Posisi

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Mainkan animasi jika tidak bermain
animationTrack:Play()
end
-- Atur kecepatan menjadi 0 untuk membekukan animasi
animationTrack:AdjustSpeed(0)
-- Lompat ke Posisi Waktu yang diinginkan
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Mainkan animasi jika tidak bermain
animationTrack:Play()
end
-- Atur kecepatan menjadi 0 untuk membekukan animasi
animationTrack:AdjustSpeed(0)
-- Lompat ke Posisi Waktu yang diinginkan
animationTrack.TimePosition = (percentagePosition / 100) * animationTrack.Length
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
freezeAnimationAtTime(animationTrack, 0.5)
freezeAnimationAtPercent(animationTrack, 50)

SetTargetInstance

()

Parameter

name: string
Nilai Default: ""
target: Instance
Nilai Default: ""

Memberikan nilai

()

Stop

()

Menghentikan AnimationTrack .Setelah dipanggil, berat animasi akan bergerak menuju nol selama jangka waktu yang ditentukan oleh parameter opsional fadeTime .Sebagai contoh, jika Stop() dipanggil dengan fadeTime dari 2 , itu akan memakan waktu dua detik untuk berat trek mencapai nol dan efeknya sepenuhnya akhiri.Harap dicatat bahwa ini akan menjadi kasus terlepas dari berat awal animasi.

Tidak disarankan untuk menggunakan fadeTime dari 0 dalam upaya untuk menghapuskan efek ini dan mengakhiri animasi segera untuk Motor6Ds yang memiliki set Motor.MaxVelocity ke nol, karena ini menyebabkan persambungan membeku di tempat.Jika harus segera berakhir, pastikan Motor.MaxVelocity dari Motor6Ds di rig Anda cukup tinggi agar mereka dapat geser dengan benar.

Parameter

fadeTime: number

Waktu, dalam detik, untuk mana berat animasi harus memudar.

Nilai Default: 0.100000001

Memberikan nilai

()

Contoh Kode

Sampel kode ini mencakup fungsi yang menghentikan AnimationTrack dengan waktu fade khusus, dan menghasilkan sampai fade selesai dan berat AnimationTrack sama dengan nol.

Tujuan sampel ini adalah untuk menunjukkan bagaimana parameter fadeTime dari AnimationTrack.Stop bekerja.Dalam kebanyakan kasus, jika seorang pengembang ingin menghasilkan lebih dari waktu pudar, disarankan untuk menggunakan wait(fadeTime).

Trek Animasi Berhenti

local function fadeOut(animationTrack, fadeTime)
animationTrack:Stop(fadeTime)
local startTime = tick()
while animationTrack.WeightCurrent > 0 do
task.wait()
end
local timeTaken = tick() - startTime
print("Time taken for weight to reset: " .. tostring(timeTaken))
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
fadeOut(animationTrack, 1)

Acara

DidLoop

Acara ini terjadi setiap kali loop AnimationTrack selesai melakukan loop, pada updateberikutnya.

Saat ini mungkin juga menembak di akhir yang tepat dari trek animasi non berulang tetapi perilaku ini tidak boleh diandalkan.


Contoh Kode

Fungsi dalam contoh kode ini akan memainkan AnimationTrack di loop, untuk jumlah loop tertentu, sebelum menghentikan animasi.

Dalam beberapa kasus, pengembang mungkin ingin menghentikan animasi berulang setelah jumlah loop tertentu selesai, bukan setelah jumlah waktu tertentu.Di sinilah acara DidLoop dapat digunakan.

Mainkan Animasi Track untuk Beberapa Lingkaran

local function playForNumberLoops(animationTrack, number)
animationTrack.Looped = true
animationTrack:Play()
local numberOfLoops = 0
local connection = nil
connection = animationTrack.DidLoop:Connect(function()
numberOfLoops = numberOfLoops + 1
print("loop: ", numberOfLoops)
if numberOfLoops >= number then
animationTrack:Stop()
connection:Disconnect() -- penting untuk memutus koneksi saat mereka tidak lagi dibutuhkan
end
end)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playForNumberLoops(animationTrack, 5)

Ended

Melepaskan api saat AnimationTrack selesai sepenuhnya memindahkan apa pun di dunia.Animasi telah selesai dimainkan, "memudar" selesai, dan subjek berada dalam posisi netral.

Anda dapat menggunakan ini untuk mengambil tindakan ketika subjek trek animasi kembali dalam posisi netral yang tidak dipengaruhi oleh AnimationTrack atau untuk membersihkan AnimationTrack .atau koneksi terkait lainnya.


Contoh Kode

Fungsi dalam contoh kode ini memainkan animasiTrack dan menghasilkan sampai berhenti dan berakhir, mencetak di setiap langkah di sepanjang jalan.

Pelacak Animasi Berakhir

local InsertService = game:GetService("InsertService")
local Players = game:GetService("Players")
-- Buat model NPC untuk dianimasikan.
local npcModel = Players:CreateHumanoidModelFromUserId(129687796)
npcModel.Name = "JoeNPC"
npcModel.Parent = workspace
npcModel:MoveTo(Vector3.new(0, 15, 4))
local humanoid = npcModel:WaitForChild("Humanoid")
-- Muat animasi.
local animationModel = InsertService:LoadAsset(2510238627)
local animation = animationModel:FindFirstChildWhichIsA("Animation", true)
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
-- Hubungkan ke acara Berhenti. Ini menembak ketika animasi berhenti dari
-- setuju sendiri, atau kami secara eksplisit memanggil Stop.
animationTrack.Stopped:Connect(function()
print("Animation stopped")
end)
-- Hubungkan ke acara Berakhir. Ini menembak ketika ketika animasi selesai
-- selesai mempengaruhi dunia. Dalam kasus ini akan menembak 3 detik
-- setelah kami memanggil animasiTrack:Stop karena kami melewati 3
-- fadeOut kedua.
animationTrack.Ended:Connect(function()
print("Animation ended")
animationTrack:Destroy()
end)
-- Jalankan, berikan sedikit untuk bermain, lalu berhenti.
print("Calling Play")
animationTrack:Play()
task.wait(10)
print("Calling Stop")
animationTrack:Stop(3)

KeyframeReached

Memicu setiap kali pemutaran ulang dari AnimationTrack mencapai Keyframe yang tidak memiliki nama default - "Keyframe."

Acara ini memungkinkan seorang pengembang untuk menjalankan kode di titik yang telah ditentukan sebelumnya dalam animasi (ditetapkan oleh Keyframe nama).Ini memungkinkan fungsi default animasi Roblox untuk diperluas dengan menambahkan Sounds atau ParticleEffects di berbagai titik dalam animasi.

Keyframe nama tidak perlu unik.Sebagai contoh, jika Animasi memiliki tiga keyframe yang disebut "Particles" KeyframeReached akan menembak setiap kali salah satu keyframe ini tercapai.

Keyframe nama dapat ditetapkan di Editor Animasi Roblox saat membuat atau mengedit animasi.Namun, mereka tidak dapat ditetapkan oleh Script pada animasi yang ada sebelum dimainkan.

Parameter

keyframeName: string

Nama dari Keyframe tercapai.


Stopped

Memicu kebakaran setiap kali AnimationTrack selesai bermain.

Acara ini memiliki beberapa penggunaan.Ini dapat digunakan untuk menunggu sampai AnimationTrack berhenti sebelum melanjutkan (misalnya, jika menggabungkan serangkaian animasi untuk diputar setelah satu sama lain).Ini juga dapat digunakan untuk membersihkan setiap Instances yang dibuat selama pemutaran animasi.


Contoh Kode

Fungsi dalam sampel kode ini akan memainkan animasiTrack dan menghasilkan sampai berhenti, sebelum dicetak.

Trek Animasi Berhenti

local function yieldPlayAnimation(animationTrack, fadeTime, weight, speed)
animationTrack:Play(fadeTime, weight, speed)
animationTrack.Stopped:Wait()
print("Animation has stopped")
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
yieldPlayAnimation(animationTrack, 1, 0.6, 1)