Pose

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

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

ตําแหน่งที่ใช้ CFrame ที่ประกอบด้วย Motor6D ที่เชื่อมต่อกับ Class.BasePart ของมัน ส่วนที่ควบคุมขึ้นอยู่กับชื่อของตําแหน่งนั้น

โพสเป็นบล็อกก่อสร้างพื้นฐานของอนิเมชันและด้วย Keyframes สร้างขึ้น KeyframeSequences

ตําแหน่ง ข้อต่อ และระดับ

แม้ว่าโพสจะได้รับการกำหนดชื่อว่า BasePart โดยชื่อ แต่วัตถุที่ถูกจัดการในระหว่างการเล่นอนิเมชันนั้นเป็นจริงคือ Motor6D ที่เชื่อมต่อกับส่วนนี้ผ่านข

ใน R15 ชุดตัวละคร ส่วนโครตของการ์ดจะเป็นส่วนโครตของมนุษย์ ส่วนล่างของตัวละครจะเชื่อมต่อกับส่วนโครตของมนุษย์โดยชื่อว่า 'โรเต' ดังนั้น <

ตําแหน่งถูกจัดเรียงใน Keyframe ตามความสัมพันธ์ระดับรวม นี่หมายถึง, ตําแหน่ง CFrame ของโพสถูกประยุกต์กับมอเตอร์ที่เชื่อมต่อกับโ

โพส CFrame

ระบบอนิเมชัน Roblox ใช้ Pose.CFrame กับ Class.Motor6D</Class.Motor6D> โดยการปรับแต่งการเปลี่ยนแปลงที่เกี่ยวข้องของม

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

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 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

สรุป

คุณสมบัติ

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

    นี้ CFrame ใช้กับ Class.Motor6D ที่ตรงกับ Class.Pose เมื่อ Class.Motor6D.Transform ถูกเปลี่ยน

คุณสมบัติรับทอดมาจากPoseBase
  • อ่านพร้อมๆ กัน

    ทิศทางการลดลงเพื่อให้เข้าถึงมูลค่าต่อไปของโพสตัว

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

    สไตล์การปรับให้ใช้เพื่อให้มีค่าตัวต่อไปของโพสที่นี่

  • อ่านพร้อมๆ กัน
    เลิกใช้แล้ว

วิธีการ

  • AddSubPose(pose : Instance):void

    เพิ่ม sub Pose ใน Pose โดยการประกอบมัน

  • GetSubPoses():Instances

    กลับรายการที่มีขนาดใหญ่เกินไป เช่น Poses ที่ได้รับการเพิ่มใน Pose

  • RemoveSubPose(pose : Instance):void

    ลบ sub Pose จาก Pose โดยการประกอบมันเป็นโมฆะ

คุณสมบัติ

CFrame

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

นี้ CFrame ใช้กับ Motor6D ที่ตรงกับ Class.Pose เมื่อ Pose ถูกเปลี่ยนแปลง ส่วนค่า

Pose วัตถุจัดตั้งขึ้นใน Keyframe ที่มีความสัมพันธ์ระดับการผสานกัน นี่หมายถึงว่า Pose.CFrame ถูกใช้กับมอเตอร์ที่เชื่อมต่อกับส่วนที่เกี่ยว

วิธีการ

AddSubPose

void

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

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

พารามิเตอร์

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

GetSubPoses

Instances

กลับรายการที่มีขนาดใหญ่เท่านั้นที่เพิ่มลงใน Poses เท่านั้น นี่คือการใช้งานเหมือนกันกับการใช้งาน Pose บน Instance:GetChildren()

หมายเหตุ: ฟังก์ชันนี้กลับค่าเด็กของ Pose ทั้งหมด รวมทั้ง Pose ไม่ได้อยู่ หากมีใด ๆ จะปรากฏขึ้น


ส่งค่ากลับ

Instances

รายการของ sub 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

RemoveSubPose

void

ลบลูก Pose จากลูก Pose โดยการประกอบมันเป็นโมฆะ นี่คือการใช้งานที่เหมือนกันกับการตั้งลูก Instance.Parent ให้เป็นโมฆะ

หมายเหตุ: หากใช้ Instance นอกเหนือจาก Pose เป็นตัวแปร Pose นี้จะลบออก 2> Class.Instance2> และไม่ให้ข้อผิดพลาด

พารามิเตอร์

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

อีเวนต์