Pose

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

一個姿勢包含 CFrame 應用在 Motor6D 與它的聯絡 BasePart 上。控制的零件取決於姿勢的名稱。

ポーズ是動畫的基本建造磚塊,並且,使用 Keyframes,組成 KeyframeSequences

位置、關節和階層

雖然 Pose 是由名稱來指定 BasePart ,但在動畫播放時操作的對象實際上是由此零件連接到的 Motor6D 。動畫網格從模型的根部分延伸到此零件。

在 R15 角色骨架中,根部是 HumanoidRootPart 的根。下半身連接到 HumanoidRootPart 的 HumanoidRootPart 由名為 '根' 的機器名稱。因此, Pose 名稱中的 CFrame 將適用於機器名稱為 '根' ,而不是 Keyframe 本身。

位置是由共同階層組織在 Keyframe 上。這意味著,位置的 CFrame 是適用於與位置相關的位置的引用。這表示,位置的 Datatype.CFrame 是適用於與位置相關的位置的引用。在 R15 角色上的視覺示例可以從下面查看。

擺放 CFrame

Roblox 動畫系統對相應的 Pose.CFrame 適用 Motor6D 對應的 Motor6D.Transform 通過操作機器的相對變形來實現。 原來的 2>Class.JointInstance.C1|C0

範例程式碼

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

概要

屬性

屬性 繼承自 PoseBase

方法

屬性

CFrame

平行讀取

CFrame 適用於 Motor6DPose 當 1> Class.Motor6D.Transform1> 時變更。原始 4> Class.Motor6D.C04>

Pose 對象由共同階層組織在 Keyframe 上。這意味著,Pose.CFrame 應用於與姿勢相關的機器連接到姿勢的父元素。

方法

AddSubPose

void

將子 Pose 添加到 Pose 由讓它作為它的父級來設置。它與設置新姿勢的 Instance.Parent 相功能相同。

注意,當 Pose 以外的實例為姿勢參數時,此功能不會發生錯誤,且將成功擁有它。

參數

pose: Instance

要新增的 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() 函數在 1> Class.Pose1> 上相同。

注意:此功能會返回 Pose 的所有子,包括非 Pose 的子 Instances 如果存在。


返回

Instances

一個子 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

將一個子 PosePose 移除,將它作為父級設定零。這與設置新姿勢的 Instance.Parent 無功能相同。

注意:如果 Instance 以外的 Pose 作為 Pose 參數,此功能會移除該 2>Class.Instance2> ,並且不提供錯誤。

參數

pose: Instance

要移除的 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

活動