KeyframeSequence
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
วัตถุนี้จัดเก็บทั้งหมด Keyframes สําหรับแอนิเมชั่น กำหนดว่าแอนิเมชั่นถูกซ้ำหรือไม่ และกำหนดลําดับความสําคัญของแอนิเมชั่นต่อแอนิเมชั่นอื่น
KeyframeSequence คืออะไร?
Roblox สร้างข้อมูลแอนิเมชันที่ใช้ในการเล่นแบ็คของแอนิเมชันโดยอ้างอิงจากคุณสมบัติ Animation.AnimationId จาก KeyframeSequenceทุกแอนิเมชันหมายถึง KeyframeSequence หรือ CurveAnimation ภายในองค์กรแม้ว่าโดยปกติจะสร้างโดย Roblox Animation Editor แต่ KeyframeSequence สามารถสร้างโดยปลั๊กอินอื่นหรือแม้แต่ด้วยตัวเองได้เมื่ออัปโหลดไปยัง Roblox Roblox จะกำหนด ID เนื้อหาที่ Animations ใช้สำหรับคุณสมบัติ Animation.AnimationId ที่อัปโหลด KeyframeSequence
โปรดทราบว่าในกรณีส่วนใหญ่คุณไม่จำเป็นต้องดำเนินการกับ KeyframeSequences เนื่องจากเครื่องมือตัดต่อวิดีโอครอบคลุมฟังก์ชันการเคลื่อนไหวส่วนใหญ่อย่างไรก็ตาม ในบางกรณีคุณอาจต้องการสร้างแอนิเมชันจาก Script หรือสร้างปลั๊กอินของคุณเองอย่างไรก็ตาม เฉพาะ Roblox Studio เท่านั้นที่สามารถใช้ KeyframeSequence ที่สร้างขึ้นในลักษณะดังกล่าวได้หากคุณต้องการใช้ KeyframeSequence ดังกล่าว คุณจะต้องอัปโหลดไปยัง Roblox ตามที่อธิบายไว้ด้านล่าง
คุณสมบัติของ KeyframeSequence
KeyframeSequence.Priority และ KeyframeSequence.Loop บันทึกการตั้งค่าลําดับความสําคัญและการแอนิเมชั่นซ้ําสำหรับลําดับโปรดทราบว่าคุณสมบัติ AnimationTrack สามารถเขียนทับคุณสมบัติเหล่านี้ได้ในที่สุดในเวลาเล่น
สุดท้าย Keyframe ในลำดับ, หมายถึง Keyframe ที่มีคุณสมบัติสูงสุด Keyframe.Time กำหนดความยาวของแอนิเมชั่น
โครงสร้างของ KeyframeSequence
เฟรมสำคัญทำหน้าที่เป็นภาชนะที่บรรจุ Keyframesเฟรมสําคัญแทนที่เฟรม 'คีย์' ในแอนิเมชันที่ถูกแทรกระหว่างระหว่างการเล่น
กรอบรูปมี Poses อยู่Poses เฉพาะสำหรับแต่ละ BasePart ที่กําลังเคลื่อนไหวมีส่วนประกอบ CFrame ที่ใช้กับ Motor6D เชื่อมต่อสองส่วนท่าทางตรงกับ BasePart พวกเขาตรงกับด้วยชื่อและใช้ข้อมูลของพวกเขากับ Motor6D ด้วยส่วนชื่อเดียวกันที่ระบุว่าเป็น Motor6D.P1ด้วยเหตุผลนี้ การแสดงภาพเคลื่อนไหวจะต้องมีชื่อส่วนที่แตกต่างกันเพื่อเล่นได้อย่างถูกต้อง
ท่าทางตามการจัดเรียงระดับร่วมตามโครงสร้างบิดาของแต่ละ Pose ตรงกับ Pose ของส่วนที่มันแนบมาในการปฏิบัติ ซึ่งหมายความว่าสาขาตําแหน่งออกจากส่วนรากดูตัวอย่างภาพที่อยู่ด้านล่าง
ใช้ KeyframeSequences เมื่อสร้างแอนิเมชั่น
คุณต้องอัปโหลด KeyframeSequences ไปยัง Roblox ก่อนจึงจะสามารถเล่นในประสบการณ์ได้ใน Studio คลิกขวาที่ KeyframeSequence และคลิก 'บันทึกไปยัง Roblox'หรือคุณสามารถใช้ฟังก์ชัน Plugin:SaveSelectedToRoblox() ได้วิธีใดวิธีหนึ่งจะนำหน้าต่างอัปโหลดแอนิเมชันขึ้นมาและอนุญาตให้คุณอัปโหลด KeyframeSequence เป็นแอนิเมชัน
ในบางกรณีคุณอาจต้องการดูตัวอย่างแอนิเมชั่นก่อนอัปโหลดไปยังไซต์ Robloxคุณสามารถสร้าง ID ชั่วคราวโดยใช้ KeyframeSequenceProvider:RegisterKeyframeSequence()จะสร้างไอดีแฮชที่สามารถใช้สำหรับการทดสอบแอนิเมชันที่กำหนดเองได้
การรับลำดับเฟรมหลัก
ในบางกรณีคุณอาจต้องการดาวน์โหลด KeyframeSequence ที่ตรงกับแอนิเมชั่นที่อัปโหลดอยู่แล้วคุณสามารถใช้ AnimationClipProvider:GetAnimationClipAsync() แอนิเมชัน
ตัวอย่างโค้ด
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
สรุป
คุณสมบัติ
มีความสูงสะโพกของรูปแบบที่ใช้ในการเขียนนี้ Humanoid ของโมเดลที่ใช้เพื่อเขียนนี้ KeyframeSequence
กำหนดว่าแอนิเมชั่นที่บันทึกไว้ในนี้ AnimationClip มีจุดมุ่งหมายเพื่อทำซ้ำหรือไม่
กำหนดว่าคลิปใดมีลําดับความสําคัญเมื่อมีการเล่นแอนิเมชั่นหลายรายการพร้อมกัน
วิธีการ
เพิ่ม Keyframe ให้กับ KeyframeSequence โดยการปลูกฝังมันให้กับ KeyframeSequence
ส่งคืนคอลเลกชันที่มีทั้งหมด Keyframes ที่มีอยู่ใน KeyframeSequence
ฟังก์ชันนี้ลบ Keyframe จาก KeyframeSequence โดยการตั้งค่าพ่อของมันเป็น nil
คุณสมบัติ
AuthoredHipHeight
มีความสูงสะโพกของรูปแบบที่ใช้ในการเขียนนี้ Humanoid ของโมเดลที่ใช้เพื่อเขียนนี้ KeyframeSequenceค่าเริ่มต้นคือ 1.35 เนื่องจากเป็นค่าความสูงสะโพกสำหรับ R15 มาตรฐาน Character|character
วิธีการ
AddKeyframe
ฟังก์ชันนี้เพิ่ม Keyframe ให้กับ KeyframeSequence โดยการปลูกฝังมันให้กับ KeyframeSequenceมันเป็นทางฟังก์ชันเหมือนกับการตั้งค่า keyframe Instance.Parent เป็น KeyframeSequence
โปรดทราบว่าฟังก์ชันนี้จะไม่เกิดข้อผิดพลาดเมื่อเรียกด้วยตัวแปร instance อื่นจาก Keyframe เป็นพารามิเตอร์ keyframe และจะสร้างได้สำเร็จ
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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
รับเฟรมกุญแจ ส่งคืนคอลเลกชันที่มีทั้งหมด Keyframes ที่ถูกเพิ่มเข้าไปใน KeyframeSequence
ส่งค่ากลับ
ชุดของ Keyframe .
ตัวอย่างโค้ด
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
ฟังก์ชันนี้ลบ Keyframe จาก KeyframeSequence โดยการตั้งค่าพ่อของมันเป็น nilมันเป็นฟังก์ชันที่เหมือนกันกับการตั้งค่าพ่อของ keyframe เป็น nil
สิ่งนี้ตั้งให้พ่อของ keyframe เป็น nil แต่ไม่ทำลายมันซึ่งหมายความว่า หากมีการอ้างอิงอื่นเกี่ยวกับ keyframe อยู่ สามารถนำกลับมาเป็นพ่อแม่ได้ในภายหลัง
โปรดทราบว่าฟังก์ชันนี้จะไม่เกิดข้อผิดพลาดเมื่อเรียกด้วย Instance อื่นจาก Keyframe เป็นพารามิเตอร์ keyframe
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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)