Keyframe
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
Class.Pose|Poses ที่ประกอบด้วย Model ที่มีอยู่ในจุดเวลาที่กำหนดในแอนิเมชัน Keyframes จะประกอบระหว่างระหว่างการเล่นแอนิเมชัน
หมายเหตุในกรณีส่วนใหญ่ผู้พัฒนาไม่จำเป็นต้องปรับปรุง KeyframeSequences ปลั๊กอินอย่างไรก็ตามในบางกรณีผู้พั�
โครงสร้าง
ตัวแสดงผลถูกรักษาภายใน KeyframeSequence และประกอบด้วย Pose ตัวแสดงผลถูกนำมาใช้ในทุกขนาด
หมายเหตุ, เมื่อ Poses ได้รับชื่อตามชื่อของ BaseParts ที่พวกเขาตรงกัน, อนิเมชั่นต้องการชื่อชิ้นส่วนที่แตกต่างกันเพื่อเล่นอย่างถูกต้อง
การแปล
ระหว่างการเล่นอนิเมชัน ตําแหน่งในแนวคิดต่าง ๆ จะถูกเรียงลําดับระหว่างกัน นี่เป็นวิธีที่เราสามารถสร้างอนิเมชันที่เรียบ
ตัวอย่างโค้ด
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)
สรุป
คุณสมบัติ
วิธีการ
เพิ่ม KeyframeMarker ให้กับ Keyframe โดยการเป็นลูกของมัน
กลับรายการที่มีทั้งหมด KeyframeMarkers ที่ได้รับการเพิ่มใน Keyframe
ลบ KeyframeMarker จาก Keyframe โดยการตั้งค่าให้ Instance.Parent เป็น zero
ลบ Pose จาก Keyframe โดยการตั้งค่า Instance.Parent ให้เป็น zero
คุณสมบัติ
Time
สมบัตินี้ให้ตำแหน่งเวลา Keyframe แอนิเมชันสิ่งนี้กำหนดเวลาที่เวลา Poses ภายใน keyframe จะปรากฏให้เห็น
หมายเหตุ Keyframe ด้วยค่าเวลาสูงสุดใน KeyframeSequence แอนิเมชัน
ตัวอย่างโค้ด
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)
วิธีการ
AddMarker
ฟังก์ชันนี้เพิ่ม KeyframeMarker ให้กับ Keyframe โดยการประกอบมันเป็นพ่อของมาร์คเกอร์ มันเหมือนกันในทางฟังก์ชันกับการตั้งค่า Instance.Parent ของมาร์คเกอร์ใน Keyframe
หมายเหตุ, ฟังก์ชันนี้จะไม่เกิดข้อผิดพลาดเมื่อมีรายการอื่นนอกจาก Keyframe Marker เป็นพารามิเตอร์และจะประสบความสำเร็จในการปัดเป่า
เพิ่มเติมเกี่ยวกับ Keyframes
Keyframe ชื่อไม่จำเป็นต้องเป็นเอกลักษณ์ เช่น หากอนิเมชันมีสามช่องสี่สีที่มีชื่อว่า "อนุภาค" สิ่งที่เชื่อมโยงกลับโดย AnimationTrack:GetMarkerReachedSignal() จะเปิดให้บริการทุกคร
Keyframe สามารถตั้งได้ใน Roblox Animation Editor แอนิเมชันชื่อเหล่านี้ไม่สามารถตั้งได้โดย Script ในอนิเมชั่นที่กำลังเล่นได้
ดูเพิ่มเติม:
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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
ฟังก์ชันนี้เพิ่ม Pose ให้กับ Keyframe โดยการประกอบมันเป็นพ่อของมันกับ keyframe มันเหมือนกับการตั้ง Instance.Parent ของโค้ดใน keyframe
หมายเหตุ, ฟังก์ชันนี้จะไม่ผิดพลาดเมื่อมอบตัวแปรโพสในฐานะพิกัดโพสและจะประสบความสำเร็จในการประมาณมารดา
พารามิเตอร์
Class.Pose ที่จะเพิ่ม
ส่งค่ากลับ
ตัวอย่างโค้ด
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)
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
ฟังก์ชันนี้จะกลับรายการที่ประกอบด้วย KeyframeMarkers ทั้งหมดที่ได้รับการเพิ่มใน Keyframe โปรดทราบว่าฟังก์ชันนี้จะกลับรายการ instances ของประเภท Keyframe Marker
เพิ่มเติมเกี่ยวกับ Keyframes
Keyframe ชื่อไม่จำเป็นต้องเป็นเอกลักษณ์ เช่น หากอนิเมชันมีสามช่องสี่สีที่มีชื่อว่า "อนุภาค" สิ่งที่เชื่อมโยงกลับโดย AnimationTrack:GetMarkerReachedSignal() จะเปิดให้บริการทุกคร
Keyframe สามารถตั้งได้ใน Roblox Animation Editor แอนิเมชันชื่อเหล่านี้ไม่สามารถตั้งได้โดย Script ในอนิเมชั่นที่กำลังเล่นได้
ดูเพิ่มเติม:
ส่งค่ากลับ
หนึ่งรายการที่ประกอบด้วยทั้งหมด KeyframeMarkers ที่ได้รับการเพิ่มใน 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
ฟังก์ชันนี้กลับรายการที่มีทั้งหมด Poses ที่ได้รับการเพิ่มใน Keyframe
ส่งค่ากลับ
Class.Pose|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
ฟังก์ชันนี้ลบ KeyframeMarker จาก Keyframe โดยการตั้งค่าว่า Instance.Parent เป็น zero
ตัวเครื่องหมาย Keyframe ของ Instance.Parent ถูกตั้งค่าให้เป็น zero แต่ไม่ได้ถูกทำลาย นี่หมายถึง, เมื่อเครื่องหมายถูกอ้างอิงมันสามารถเป็นพ่อของมันในภายหลังได้
หมายเหตุ, ฟังก์ชันนี้จะไม่ผิดพลาดเมื่อมีรายการอื่นนอกจาก Keyframe Marker เป็นตัวแปร
เพิ่มเติมเกี่ยวกับ Keyframes
Keyframe ชื่อไม่จำเป็นต้องเป็นเอกลักษณ์ เช่น หากอนิเมชันมีสามช่องสี่สีที่มีชื่อว่า "อนุภาค" สิ่งที่เชื่อมโยงกลับโดย AnimationTrack:GetMarkerReachedSignal() จะเปิดให้บริการทุกคร
Keyframe สามารถตั้งได้ใน Roblox Animation Editor แอนิเมชันชื่อเหล่านี้ไม่สามารถตั้งได้โดย Script ในอนิเมชั่นที่กำลังเล่นได้
ดูเพิ่มเติม:
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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
ฟังก์ชันนี้ลบ Class.Pose จาก Class.Keyframe โดยการตั้งค่า Class.Instance.Parent เป็น nil โดยไม่ต้องทำลายมัน นี่หมายถึงการอ้างอิงโพสที่ให้ไว้และสามารถเป็นพ่อแม่ได้ในภายหลัง
หมายเหตุ, ฟังก์ชั่นนี้จะไม่ผิดพลาดเมื่อมีอินสแตนซ์อื่นนอกจาก Pose ได้รับเป็นพารามิเตอร์โพสท่า
พารามิเตอร์
Class.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