KeyframeSequence
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Objek ini menyimpan semua Keyframes untuk animasi, menentukan apakah animasi itu berulang, dan menentukan prioritasnya terhadap animasi lainnya.
Apa itu KeyframeSequencer?
Roblox mengkonstruksi data animasi yang digunakannya dalam playback animasi, yang dianggap oleh property Animation.AnimationId dari KeyframeSequencer. Setiap animasi mengacu pada KeyframeSequencer atau internally CurveAnimation
Catatan, dalam kebanyakan kasus, Anda tidak perlu menipu KeyframeSequences, karena editor animasi menutangi kebanyakan fungsi animasi. Namun, dalam beberapa kasus, Anda mungkin ingin menghasilkan animasi dari Class.Script atau membangun plugin Anda sendiri. Namun, hanya Roblox Studio yang dapat menggunakan KeyframeSequences yang dibuat sepert
Properti KeyframeSequencer
KeyframeSequence.Priority dan KeyframeSequence.Loop menyimpan pengaturan prioritas dan animasi berulang untuk urutan. Catat bahwa AnimationTrack properti dapat pada akhirnya mengewakasi pengaturan ini saat waktu pemutaran.
The last Keyframe in the sequence, meaning the Keyframe with the highest Keyframe.Time property, determines the length of an animasi.
Struktur Keyframe Sequence
KeyframeSequences berperan sebagai wadah yang menampung Keyframes . Keyframe mewakili sebuah frame 'unit' dalam animasi, yang diinterpolasi selama pemutaran.
Keyframes berisi Poses . Class.Pose|Poses</
Poses mengikuti struktur berdasarkan hierarki bersama. Orang tua setiap Pose sesuai dengan Pose dari bagian yang ditaut. Dalam praktek, ini berarti poses cabang dari bagian akar. Lihat di bawah untuk contoh visual.
Menggunakan KeyframeSequences saat membuat animasi
Anda harus pertama mengunggah KeyframeSequences ke Roblox sebelum mereka dapat dimainkan dalam pengalaman. Di Studio, klik kanan pada KeyframeSequences dan klik 'Simpan ke Roblox'. Alternatifnya, Anda dapat menggunakan fungsi Plugin:SaveSelectedToRoblox() .
Dalam beberapa kasus, Anda mungkin ingin meninjau Animasi sebelum mengunggahnya ke situs Roblox. Anda dapat menghasilkan id sementara menggunakan KeyframeSequenceProvider:RegisterKeyframeSequence() . Ini akan menghasilkan id hasil yang dapat digunakan untuk tes animasi lokal.
Mengambil KeyframeSequences
Dalam beberapa kasus, Anda mungkin ingin mengunduh KeyframeSequencer yang sesuai dengan Animasi yang diunggah sebelumnya. Anda dapat menggunakan AnimationClipProvider:GetAnimationClipAsync() untuk mengunduh animasi.
Contoh Kode
This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.
local function getSequenceLength(keyframeSequence)
local length = 0
for _, keyframe in pairs(keyframeSequence:GetKeyframes()) do
if keyframe.Time > length then
length = keyframe.Time
end
end
return length
end
local keyframeSequence = Instance.new("KeyframeSequence")
getSequenceLength(keyframeSequence)
This code sample contains a simple function to generate an Animation with a generated hash ID to preview a KeyframeSequence locally.
local KeyframeSequenceProvider = game:GetService("KeyframeSequenceProvider")
local function createPreviewAnimation(keyframeSequence)
local hashId = KeyframeSequenceProvider:RegisterKeyframeSequence(keyframeSequence)
local Animation = Instance.new("Animation")
Animation.AnimationId = hashId
return Animation
end
local keyframeSequence = Instance.new("KeyframeSequence")
local animation = createPreviewAnimation(keyframeSequence)
print(animation)
This sample demonstrates how a basic KeyframeSequence can be created.
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
Rangkuman
Properti
Berisi ketinggian pinggul dari Humanoid model yang digunakan untuk menulis ini KeyframeSequence .
Menentukan apakah animasi yang disimpan di AnimationClip ini dimaksudkan untuk berulang.
Menentukan klip mana yang memiliki prioritas saat beberapa animasi bermain bersamaan.
Metode
Menambahkan Keyframe ke KeyframeSequence dengan menjadikannya orang tua untuk KeyframeSequence.
Mengembalikan array yang berisi semua Keyframes yang terkandung dalam KeyframeSequence .
Fungsi ini menghapus Keyframe dari KeyframeSequence dengan menetapkan orang tuanya menjadi nol.
Properti
AuthoredHipHeight
Berisi ketinggian pinggul dari Humanoid model yang digunakan untuk menulis KeyframeSequence ini.Nilai default adalah 1,35 karena itu adalah ketinggian pinggul set untuk R15 standar Character|character.
Metode
AddKeyframe
Fungsi ini menambahkan Keyframe ke KeyframeSequence dengan menambahkannya ke KeyframeSequence . Ini secara fungsional sama dengan menetapkan keyframe's 1> Class.Instance.Parent1> ke 4> Class.KeyframeSequencer4> .
Catatan, fungsi ini tidak akan mengalami kesalahan saat dipanggil dengan instansi selain Keyframe sebagai parameter keyframe dan akan menjadi orang tua dengan sukses.
Parameter
Class.Keyframe yang akan ditambahkan.
Memberikan nilai
Contoh Kode
This sample demonstrates how a basic KeyframeSequence can be created.
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
GetKeyframes
GetKeyframes mengembalikan array yang berisi semua Keyframes yang telah ditambahkan ke KeyframeSequence .
Memberikan nilai
Sebuah matriksi dari Keyframe .
Contoh Kode
This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.
local function getSequenceLength(keyframeSequence)
local length = 0
for _, keyframe in pairs(keyframeSequence:GetKeyframes()) do
if keyframe.Time > length then
length = keyframe.Time
end
end
return length
end
local keyframeSequence = Instance.new("KeyframeSequence")
getSequenceLength(keyframeSequence)
RemoveKeyframe
Fungsi ini menghapus Keyframe dari KeyframeSequence dengan menetapkan nilai parent-nya. Ini secara fungsional sama dengan menetapkan nilai parent keyframe.
Ini menetapkan orang tua keyframe ke nil , tetapi tidak menghancurkannya. Ini berarti, selama referensi lain ke keyframe tetap, itu dapat di-父親再生稍后。
Catatan, fungsi ini tidak akan berhasil ketika dipanggil dengan Instance selain dari Keyframe sebagai parameter keyframe.
Parameter
Class.Keyframe yang akan dihapus.
Memberikan nilai
Contoh Kode
This sample adds a Keyframe to a KeyframeSequence before removing it and adding it again. Note that once a Keyframe is removed it is not destroyed, meaning it can be re-added later.
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)