Keyframe

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.

Sebuah Keyframe menyimpan Poses yang diterapkan ke joint dalam Model pada titik waktu tertentu dalam animasi. Keyframes diinterpolasi selama playback animasi.

Catatan, dalam kebanyakan kasus pengembang tidak perlu menipu KeyframeSequences karena editor animasi menutangani kebanyakan fungsi animasi. Namun, dalam beberapa kasus pengembang mungkin ingin menghasilkan animasi dari Script atau membangun plugin mereka sendiri.

Struktur

Keyframes dipegang dalam sebuah KeyframeSequence dan berisi Pose objek. Pose disebut sesuai dengan BaseParts mereka mengacu dan dibuat dalam hal hierarki bersama. Ini berarti setiap 2>Class.

Catatan, seperti Poses bernama sesuai dengan BaseParts mereka berhubungan, animasi memerlukan nama bagian yang berbeda untuk dimainkan dengan benar.

Menerjemahkan

Selama pemutaran animasi, posisi di berbagai keyframe diinterpolasi antara. Ini memungkinkan animasi lancar untuk dibuat tanpa perlu mendefinisikan setiap frame. Catat, gaya interpolasi ditentukan dalam objek Pose . Objek Keyframe hanya mengandung gaya interpolasi Poses pada titik waktu tert

Contoh Kode

Keyframe Generate Poses

local function generateKeyframe(model)
if not model.PrimaryPart then
warn("No primary part set")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Root part not found")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- get all of the joints attached to the part
for _, joint in pairs(part:GetJoints()) do
-- we're only interested in Motor6Ds
if joint:IsA("Motor6D") then
-- find the connected part
local connectedPart = nil
if joint.Part0 == part then
connectedPart = joint.Part1
elseif joint.Part1 == part then
connectedPart = joint.Part0
end
if connectedPart then
-- make sure we haven't already added this part
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- create a pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recurse
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- populate the keyframe
local rootPose = Instance.new("Pose")
rootPose.Name = rootPart.Name
addPoses(rootPart, rootPose)
keyframe:AddPose(rootPose)
return keyframe
end
local character = script.Parent
local keyframe = generateKeyframe(character)
print(keyframe)

Rangkuman

Properti

  • Baca Paralel

    Posisi waktu Keyframe dalam animasi. Ini menentukan waktu di mana Poses di dalam keyframe akan ditampilkan.

Metode

Properti

Time

Baca Paralel

Item ini memberikan posisi waktu Keyframe dalam animasi. Ini menentukan waktu di mana Poses di dalam keyframe akan ditampilkan.

Catat Keyframe dengan nilai waktu tertinggi dalam KeyframeSequence untuk menentukan panjang animasi.

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)

Metode

AddMarker

void

Fungsi ini menambahkan KeyframeMarker ke Keyframe dengan menambahkannya ke keyframe. Ini secara fungsional sama dengan menetapkan Instance.Parent ke Keyframe.

Catat, fungsi ini tidak akan berhasil ketika instans instans lain selain Keyframe Marker diberikan sebagai parameter dan akan menjadi orang tua dengan sukses.

Lebih lanjut tentang Keyframes

Keyframe nama tidak perlu unik. Misalnya, jika Animasi memiliki tiga keyframe bernama "Particles" yang dikemas oleh AnimationTrack:GetMarkerReachedSignal() akan mengecualikan setiap kali salah satu dari keyframe ini diakses.

Keyframe nama dapat ditetapkan di Roblox Animation Editor saat membuat atau mengedit animasi. Mereka tidak dapat namun ditetapkan oleh Class.Script di animasi yang sudah ada sebelum dimainkan.

Lihat juga:

Parameter

marker: Instance

The KeyframeMarker yang diwarisi ke Keyframe .


Memberikan nilai

void

Contoh Kode

Add Marker/Remove Marker

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

AddPose

void

Fungsi ini menambahkan Pose ke Keyframe dengan menambahkannya ke keyframe. Ini secara fungsional sama dengan menetapkan posisi Instance.Parent ke keyframe.

Catatan, fungsi ini tidak akan mengalami kesalahan saat instansi selain Pose diberikan sebagai parameter posisi dan akan menjadikannya orang tua dengan sukses.

Parameter

pose: Instance

The Pose untuk ditambahkan.


Memberikan nilai

void

Contoh Kode

Keyframe Generate Poses

local function generateKeyframe(model)
if not model.PrimaryPart then
warn("No primary part set")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Root part not found")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- get all of the joints attached to the part
for _, joint in pairs(part:GetJoints()) do
-- we're only interested in Motor6Ds
if joint:IsA("Motor6D") then
-- find the connected part
local connectedPart = nil
if joint.Part0 == part then
connectedPart = joint.Part1
elseif joint.Part1 == part then
connectedPart = joint.Part0
end
if connectedPart then
-- make sure we haven't already added this part
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- create a pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recurse
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- populate the keyframe
local rootPose = Instance.new("Pose")
rootPose.Name = rootPart.Name
addPoses(rootPart, rootPose)
keyframe:AddPose(rootPose)
return keyframe
end
local character = script.Parent
local keyframe = generateKeyframe(character)
print(keyframe)
Keyframe Add/Remove Pose

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local pose = Instance.new("Pose")
pose.EasingStyle = Enum.PoseEasingStyle.Cubic
pose.EasingDirection = Enum.PoseEasingDirection.Out
local pose2 = Instance.new("Pose")
pose2.EasingStyle = Enum.PoseEasingStyle.Cubic
pose2.EasingDirection = Enum.PoseEasingDirection.Out
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
keyframe:RemovePose(pose) -- pose.Parent = nil
task.wait(2)
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
pose:AddSubPose(pose2) -- pose2.Parent = pose
task.wait(2)
pose:RemoveSubPose(pose2) -- pose2.Parent = nil

GetMarkers

Instances

Fungsi ini mengembalikan matriks yang berisi semua KeyframeMarkers yang telah ditambahkan ke Keyframe . Catat, fungsi ini hanya akan mengembalikan instances dari jenis Keyframe Marker.

Lebih lanjut tentang Keyframes

Keyframe nama tidak perlu unik. Misalnya, jika Animasi memiliki tiga keyframe bernama "Particles" yang dikemas oleh AnimationTrack:GetMarkerReachedSignal() akan mengecualikan setiap kali salah satu dari keyframe ini diakses.

Keyframe nama dapat ditetapkan di Roblox Animation Editor saat membuat atau mengedit animasi. Mereka tidak dapat namun ditetapkan oleh Class.Script di animasi yang sudah ada sebelum dimainkan.

Lihat juga:


Memberikan nilai

Instances

Sebuah matriks berisi semua KeyframeMarkers yang telah ditambahkan ke Keyframe .

Contoh Kode

Get Keyframe Markers Attached to a Keyframe

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker1 = Instance.new("KeyframeMarker")
marker1.Name = "FootStep"
marker1.Value = 100
local marker2 = Instance.new("KeyframeMarker")
marker2.Name = "Wave"
marker2.Value = 100
keyframe:AddMarker(marker1) --marker.Parent = keyframe
keyframe:AddMarker(marker2) --marker.Parent = keyframe
local markers = keyframe:GetMarkers()
for _, marker in pairs(markers) do
print(marker.Name)
end

GetPoses

Instances

Fungsi ini mengembalikan matriks yang berisi semua Poses yang telah ditambahkan ke Keyframe .


Memberikan nilai

Instances

Sebuah matriks Poses .

Contoh Kode

Keyframe Reset Poses

local function resetPoses(parent)
-- both functions are equivalent to GetChildren
local poses = parent:IsA("Keyframe") and parent:GetPoses() or parent:IsA("Pose") and parent:GetSubPoses()
for _, pose in pairs(poses) do
if pose:IsA("Pose") then
pose.CFrame = CFrame.new()
-- recurse
resetPoses(pose)
end
end
end

RemoveMarker

void

Fungsi ini menghapus KeyframeMarker dari Keyframe dengan pengaturan bahwa Instance.Parent nya menjadi nol.

Class.Instance.Parent Keyframe Marker diatur ke nol tetapi tidak dihancurkan. Ini berarti, asalkan pemasar dapat diacak kemudian nanti dapat diwarisi kembali.

Catat, fungsi ini tidak akan berhasil ketika instansi selain Marker Keyframe diberikan sebagai parameter.

Lebih lanjut tentang Keyframes

Keyframe nama tidak perlu unik. Misalnya, jika Animasi memiliki tiga keyframe bernama "Particles" yang dikemas oleh AnimationTrack:GetMarkerReachedSignal() akan mengecualikan setiap kali salah satu dari keyframe ini diakses.

Keyframe nama dapat ditetapkan di Roblox Animation Editor saat membuat atau mengedit animasi. Mereka tidak dapat namun ditetapkan oleh Class.Script di animasi yang sudah ada sebelum dimainkan.

Lihat juga:

Parameter

marker: Instance

Pemasar dihapus dari Keyframe .


Memberikan nilai

void

Contoh Kode

Add Marker/Remove Marker

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

RemovePose

void

Fungsi ini menghapus Pose dari Keyframe dengan menetapkan Instance.Parent ke 2> nil2> tanpa menghancurkannya. Ini berarti bahwa posisi yang diberikan diacak dan dapat dibaca kembali nanti.

Catatan, fungsi ini tidak akan berhasil ketika instans instans lain selain Pose diberikan sebagai parameter posisi.

Parameter

pose: Instance

The Pose untuk dihapus.


Memberikan nilai

void

Contoh Kode

Keyframe Add/Remove Pose

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local pose = Instance.new("Pose")
pose.EasingStyle = Enum.PoseEasingStyle.Cubic
pose.EasingDirection = Enum.PoseEasingDirection.Out
local pose2 = Instance.new("Pose")
pose2.EasingStyle = Enum.PoseEasingStyle.Cubic
pose2.EasingDirection = Enum.PoseEasingDirection.Out
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
keyframe:RemovePose(pose) -- pose.Parent = nil
task.wait(2)
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
pose:AddSubPose(pose2) -- pose2.Parent = pose
task.wait(2)
pose:RemoveSubPose(pose2) -- pose2.Parent = nil

Acara