Keyframe

แสดงที่เลิกใช้งานแล้ว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

Class.Pose|Poses ที่ประกอบด้วย Model ที่มีอยู่ในจุดเวลาที่กำหนดในแอนิเมชัน Keyframes จะประกอบระหว่างระหว่างการเล่นแอนิเมชัน

หมายเหตุในกรณีส่วนใหญ่ผู้พัฒนาไม่จำเป็นต้องปรับปรุง KeyframeSequences ปลั๊กอินอย่างไรก็ตามในบางกรณีผู้พั�

โครงสร้าง

ตัวแสดงผลถูกรักษาภายใน KeyframeSequence และประกอบด้วย Pose ตัวแสดงผลถูกนำมาใช้ในทุกขนาด

หมายเหตุ, เมื่อ Poses ได้รับชื่อตามชื่อของ BaseParts ที่พวกเขาตรงกัน, อนิเมชั่นต้องการชื่อชิ้นส่วนที่แตกต่างกันเพื่อเล่นอย่างถูกต้อง

การแปล

ระหว่างการเล่นอนิเมชัน ตําแหน่งในแนวคิดต่าง ๆ จะถูกเรียงลําดับระหว่างกัน นี่เป็นวิธีที่เราสามารถสร้างอนิเมชันที่เรียบ

ตัวอย่างโค้ด

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 ในอนิเมชัน สิ่งนี้จะกําหนดเวลาที่เวลา Poses ภายใน keyframe จะปรากฏให้เห็น

วิธีการ

คุณสมบัติ

Time

อ่านพร้อมๆ กัน

สมบัตินี้ให้ตำแหน่งเวลา Keyframe แอนิเมชันสิ่งนี้กำหนดเวลาที่เวลา Poses ภายใน keyframe จะปรากฏให้เห็น

หมายเหตุ Keyframe ด้วยค่าเวลาสูงสุดใน KeyframeSequence แอนิเมชัน

ตัวอย่างโค้ด

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)

วิธีการ

AddMarker

void

ฟังก์ชันนี้เพิ่ม KeyframeMarker ให้กับ Keyframe โดยการประกอบมันเป็นพ่อของมาร์คเกอร์ มันเหมือนกันในทางฟังก์ชันกับการตั้งค่า Instance.Parent ของมาร์คเกอร์ใน Keyframe

หมายเหตุ, ฟังก์ชันนี้จะไม่เกิดข้อผิดพลาดเมื่อมีรายการอื่นนอกจาก Keyframe Marker เป็นพารามิเตอร์และจะประสบความสำเร็จในการปัดเป่า

เพิ่มเติมเกี่ยวกับ Keyframes

Keyframe ชื่อไม่จำเป็นต้องเป็นเอกลักษณ์ เช่น หากอนิเมชันมีสามช่องสี่สีที่มีชื่อว่า "อนุภาค" สิ่งที่เชื่อมโยงกลับโดย AnimationTrack:GetMarkerReachedSignal() จะเปิดให้บริการทุกคร

Keyframe สามารถตั้งได้ใน Roblox Animation Editor แอนิเมชันชื่อเหล่านี้ไม่สามารถตั้งได้โดย Script ในอนิเมชั่นที่กำลังเล่นได้

ดูเพิ่มเติม:

พารามิเตอร์

marker: Instance

Class.KeyframeMarker เป็นลูกของ Keyframe


ส่งค่ากลับ

void

ตัวอย่างโค้ด

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

ฟังก์ชันนี้เพิ่ม Pose ให้กับ Keyframe โดยการประกอบมันเป็นพ่อของมันกับ keyframe มันเหมือนกับการตั้ง Instance.Parent ของโค้ดใน keyframe

หมายเหตุ, ฟังก์ชันนี้จะไม่ผิดพลาดเมื่อมอบตัวแปรโพสในฐานะพิกัดโพสและจะประสบความสำเร็จในการประมาณมารดา

พารามิเตอร์

pose: Instance

Class.Pose ที่จะเพิ่ม


ส่งค่ากลับ

void

ตัวอย่างโค้ด

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

ฟังก์ชันนี้จะกลับรายการที่ประกอบด้วย KeyframeMarkers ทั้งหมดที่ได้รับการเพิ่มใน Keyframe โปรดทราบว่าฟังก์ชันนี้จะกลับรายการ instances ของประเภท Keyframe Marker

เพิ่มเติมเกี่ยวกับ Keyframes

Keyframe ชื่อไม่จำเป็นต้องเป็นเอกลักษณ์ เช่น หากอนิเมชันมีสามช่องสี่สีที่มีชื่อว่า "อนุภาค" สิ่งที่เชื่อมโยงกลับโดย AnimationTrack:GetMarkerReachedSignal() จะเปิดให้บริการทุกคร

Keyframe สามารถตั้งได้ใน Roblox Animation Editor แอนิเมชันชื่อเหล่านี้ไม่สามารถตั้งได้โดย Script ในอนิเมชั่นที่กำลังเล่นได้

ดูเพิ่มเติม:


ส่งค่ากลับ

Instances

หนึ่งรายการที่ประกอบด้วยทั้งหมด KeyframeMarkers ที่ได้รับการเพิ่มใน Keyframe

ตัวอย่างโค้ด

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

ฟังก์ชันนี้กลับรายการที่มีทั้งหมด Poses ที่ได้รับการเพิ่มใน Keyframe


ส่งค่ากลับ

Instances

Class.Pose|Poses รายการ

ตัวอย่างโค้ด

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

ฟังก์ชันนี้ลบ KeyframeMarker จาก Keyframe โดยการตั้งค่าว่า Instance.Parent เป็น zero

ตัวเครื่องหมาย Keyframe ของ Instance.Parent ถูกตั้งค่าให้เป็น zero แต่ไม่ได้ถูกทำลาย นี่หมายถึง, เมื่อเครื่องหมายถูกอ้างอิงมันสามารถเป็นพ่อของมันในภายหลังได้

หมายเหตุ, ฟังก์ชันนี้จะไม่ผิดพลาดเมื่อมีรายการอื่นนอกจาก Keyframe Marker เป็นตัวแปร

เพิ่มเติมเกี่ยวกับ Keyframes

Keyframe ชื่อไม่จำเป็นต้องเป็นเอกลักษณ์ เช่น หากอนิเมชันมีสามช่องสี่สีที่มีชื่อว่า "อนุภาค" สิ่งที่เชื่อมโยงกลับโดย AnimationTrack:GetMarkerReachedSignal() จะเปิดให้บริการทุกคร

Keyframe สามารถตั้งได้ใน Roblox Animation Editor แอนิเมชันชื่อเหล่านี้ไม่สามารถตั้งได้โดย Script ในอนิเมชั่นที่กำลังเล่นได้

ดูเพิ่มเติม:

พารามิเตอร์

marker: Instance

มาร์คเกอร์ถูกลบออกจาก Keyframe


ส่งค่ากลับ

void

ตัวอย่างโค้ด

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

ฟังก์ชันนี้ลบ Class.Pose จาก Class.Keyframe โดยการตั้งค่า Class.Instance.Parent เป็น nil โดยไม่ต้องทำลายมัน นี่หมายถึงการอ้างอิงโพสที่ให้ไว้และสามารถเป็นพ่อแม่ได้ในภายหลัง

หมายเหตุ, ฟังก์ชั่นนี้จะไม่ผิดพลาดเมื่อมีอินสแตนซ์อื่นนอกจาก Pose ได้รับเป็นพารามิเตอร์โพสท่า

พารามิเตอร์

pose: Instance

Class.Pose ที่จะถูกลบออก


ส่งค่ากลับ

void

ตัวอย่างโค้ด

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

อีเวนต์