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

Metode

Properti

AuthoredHipHeight

Tersembunyi
Keamanan Plugin
Baca Paralel

Berisi ketinggian pinggul dari Humanoid model yang digunakan untuk menulis ini KeyframeSequence .Nilai default adalah 1.35 karena itu adalah set ketinggian pinggul untuk R15 standar Character|character .

Metode

AddKeyframe

()

Fungsi ini menambahkan Keyframe pada KeyframeSequence dengan membesarkannya ke KeyframeSequence .Ini secara fungsional identik dengan menetapkan keyframe Instance.Parent ke KeyframeSequence.

Catatan, fungsi ini tidak akan gagal saat dipanggil dengan instansi selain Keyframe sebagai parameter keyframe dan akan membesarkannya dengan sukses.

Parameter

keyframe: Instance

The Keyframe untuk ditambahkan.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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

GetKeyframes

Instances

Dapatkan Keyframe kembali array yang berisi semua Keyframes yang telah ditambahkan ke KeyframeSequence .


Memberikan nilai

Instances

Sebuah array 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.

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

()

Fungsi ini menghapus Keyframe dari KeyframeSequence dengan menetapkan orang tuanya ke nil .Ini secara fungsional identik dengan menetapkan orangtua keyframe ke nil .

Ini menetapkan orangtua keyframe menjadi nil , tetapi tidak menghancurkannya.Ini berarti, asalkan referensi lain ke keyframe tetap ada, nantinya bisa diberikan kembali kepada orang tua lain.

Catatan, fungsi ini tidak akan gagal saat dipanggil dengan Instance lain selain Keyframe sebagai parameter keyframe.

Parameter

keyframe: Instance

The Keyframe yang harus dihapus.

Nilai Default: ""

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.

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