Pose
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
ตําแหน่งที่ใช้ CFrame ที่ประกอบด้วย Motor6D ที่เชื่อมต่อกับ Class.BasePart ของมัน ส่วนที่ควบคุมขึ้นอยู่กับชื่อของตําแหน่งนั้น
โพสเป็นบล็อกก่อสร้างพื้นฐานของอนิเมชันและด้วย Keyframes สร้างขึ้น KeyframeSequences
ตําแหน่ง ข้อต่อ และระดับ
แม้ว่าโพสจะได้รับการกำหนดชื่อว่า BasePart โดยชื่อ แต่วัตถุที่ถูกจัดการในระหว่างการเล่นอนิเมชันนั้นเป็นจริงคือ Motor6D ที่เชื่อมต่อกับส่วนนี้ผ่านข
ใน R15 ชุดตัวละคร ส่วนโครตของการ์ดจะเป็นส่วนโครตของมนุษย์ ส่วนล่างของตัวละครจะเชื่อมต่อกับส่วนโครตของมนุษย์โดยชื่อว่า 'โรเต' ดังนั้น <
ตําแหน่งถูกจัดเรียงใน Keyframe ตามความสัมพันธ์ระดับรวม นี่หมายถึง, ตําแหน่ง CFrame ของโพสถูกประยุกต์กับมอเตอร์ที่เชื่อมต่อกับโ
โพส CFrame
ระบบอนิเมชัน Roblox ใช้ Pose.CFrame กับ Class.Motor6D</Class.Motor6D> โดยการปรับแต่งการเปลี่ยนแปลงที่เกี่ยวข้องของม
ตัวอย่างโค้ด
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 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
สรุป
คุณสมบัติ
นี้ CFrame ใช้กับ Class.Motor6D ที่ตรงกับ Class.Pose เมื่อ Class.Motor6D.Transform ถูกเปลี่ยน
ทิศทางการลดลงเพื่อให้เข้าถึงมูลค่าต่อไปของโพสตัว
สไตล์การปรับให้ใช้เพื่อให้มีค่าตัวต่อไปของโพสที่นี่
วิธีการ
คุณสมบัติ
วิธีการ
AddSubPose
เพิ่ม sub Pose ใน Class.Pose โดยการประกอบมัน มันเหมือนกันอย่างฟังก์ชันกับการตั้งค่าตำแหน่งใหม่ของ Pose ในตำแหน่ง มันเหมือนกันกับการตั้งค่า Instance.Parent ใ
หมายเหตุ, ฟังก์ชันนี้จะไม่ผิดพลาดเมื่อมอบตัวแปรโพสในฐานะพิกัดโพสและจะประสบความสำเร็จในการประมาณมารดา
พารามิเตอร์
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
GetSubPoses
กลับรายการที่มีขนาดใหญ่เท่านั้นที่เพิ่มลงใน Poses เท่านั้น นี่คือการใช้งานเหมือนกันกับการใช้งาน Pose บน Instance:GetChildren()
หมายเหตุ: ฟังก์ชันนี้กลับค่าเด็กของ Pose ทั้งหมด รวมทั้ง Pose ไม่ได้อยู่ หากมีใด ๆ จะปรากฏขึ้น
ส่งค่ากลับ
รายการของ sub 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
RemoveSubPose
ลบลูก Pose จากลูก Pose โดยการประกอบมันเป็นโมฆะ นี่คือการใช้งานที่เหมือนกันกับการตั้งลูก Instance.Parent ให้เป็นโมฆะ
หมายเหตุ: หากใช้ Instance นอกเหนือจาก Pose เป็นตัวแปร Pose นี้จะลบออก 2> Class.Instance2> และไม่ให้ข้อผิดพลาด
พารามิเตอร์
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