KeyframeSequence

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.

Objek ini menyimpan semua Keyframes untuk animasi, menentukan apakah animasi diputar ulang, dan menentukan prioritasnya terhadap animasi lain.

Apa itu Sequensi Keyframe?

Roblox membuat data animasi yang digunakannya dalam pemutaran animasi, dikesan oleh properti Animation.AnimationId dari KeyframeSequence.Setiap animasi merujuk ke KeyframeSequence atau ke Animasi Kurva secara internal.Meskipun, biasanya dibuat oleh Editor Animasi Roblox, KeyframeSequence juga dapat dibuat oleh plugin lain atau bahkan secara manual.Setelah diunggah ke Roblox, Roblox menugaskan ID Konten yang Animations digunakan untuk properti Animation.AnimationId untuk merujuk ke KeyframeSequence yang diunggah.

Catatan, dalam kebanyakan kasus, Anda tidak perlu memanipulasi Urutan Keyframe, karena editor animasi mencakup sebagian besar fungsi animasi.Namun, dalam beberapa kasus Anda mungkin ingin menghasilkan animasi dari Script atau membangun plugin Anda sendiri.Namun, hanya Roblox Studio yang dapat menggunakan KeyframeSequence yang dibuat dengan cara seperti itu.Jika Anda ingin menggunakan KeyframeSequence seperti itu, Anda perlu mengunggahnya ke Roblox seperti yang dijelaskan di bawah ini.

Properti Urutan Frame Kunci

KeyframeSequence.Priority dan KeyframeSequence.Loop simpan pengaturan prioritas dan animasi berulang untuk urutan.Perhatikan bahwa properti AnimationTrack dapat akhirnya menulis ulang properti ini saat diputar.

Terakhir Keyframe di urutan, berarti Keyframe dengan properti Keyframe.Time tertinggi, menentukan panjang animasi.

Struktur Kunci Frame Sequensi

Framasi Kunci bertindak sebagai wadah yang menyimpan Keyframes .Keyframe mewakili frame 'unit' dalam animasi, yang diinterpolasi di antara selama pemutaran.

Keyframe berisi Poses . Poses , khusus untuk setiap BasePart yang dianimasikan, berisi CFrame yang diterapkan ke Motor6D yang menghubungkan dua bagian.Posisi cocok dengan BasePart yang sesuai dengan nama dan menerapkan data mereka ke Motor6D dengan bagian bernama sama ini diidentifikasi sebagai Motor6D.P1 .Untuk alasan ini, animasi memerlukan nama bagian yang berbeda untuk dimainkan dengan benar.

Posisi mengikuti struktur berdasarkan hierarki bersama.Orangtua dari masing-masing Pose sesuai dengan Pose dari bagian yang ditautkannya.Dalam praktik, ini berarti cabang posisi keluar dari bagian akar.Lihat di bawah ini untuk contoh visual.

Menggunakan KeyframeSequences saat membuat animasi

Anda harus terlebih dahulu mengunggah KeyframeSequences ke Roblox sebelum dapat dimainkan dalam pengalaman.Di Studio, klik kanan pada KeyframeSequence dan klik 'Simpan ke Roblox'.Alternatifnya, Anda dapat menggunakan fungsi Plugin:SaveSelectedToRoblox().Kedua metode akan membuka jendela unggahan animasi dan memungkinkan Anda untuk mengunggah KeyframeSequence Anda sebagai animasi.

Dalam beberapa kasus, Anda mungkin ingin mempratinjau Animasi sebelum mengunggahnya ke situs Roblox.Anda dapat menghasilkan id sementara menggunakan KeyframeSequenceProvider:RegisterKeyframeSequence().Ini akan menghasilkan ID hash yang dapat digunakan untuk pengujian animasi lokal.

Mendapatkan Urutan Frame Kunci

Dalam beberapa kasus Anda mungkin ingin mengunduh KeyframeSequence yang sesuai dengan Animasi yang diunggah yang ada.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.

Get KeyframeSequence Length

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.

Create temporary animation

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.

KeyframeSequence Instantiation

-- 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

Properti diwarisi dari AnimationClip

Properti

Metode

Properti

AuthoredHipHeight

Tersembunyi
Keamanan Plugin
Baca Paralel

Metode

AddKeyframe

()

Parameter

keyframe: Instance
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

KeyframeSequence Instantiation

-- 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

Instances

Memberikan nilai

Instances

Contoh Kode

Get KeyframeSequence Length

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

()

Parameter

keyframe: Instance
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

KeyframeSequence RemoveKeyframe

local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)

Acara