Pose

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Eine Pose hält die CFrame angewendet, die mit dem Motor6D verbunden ist, das mit seinem verbundenen BasePart verbunden ist.Der Teil, der gesteuert wird, hängt vom Namen der Pose ab.

Posen sind die grundlegenden Bausteine von Animationen und, mit Keyframes, machen sie KeyframeSequences aus.

Posen, Gelenke und Hierarchie

Obwohl eine Pose einem BasePart durch den Namen zugewiesen wird, ist das während der Animation manipulierte Objekt tatsächlich das Motor6D, das mit diesem Teil verbunden ist.Animationsrigs gehen von dem Wurfteil des Modells durch solche Gelenke aus.

In einem R15-Charakter-Rig ist der Wurzelteil die HumanoidRootPart.Der Unterkörper ist mit der HumanoidRootPart durch einen Motor namens "Root" verbunden.Daher würde das CFrame einer Pose mit dem Namen 'LowerTorso' in einem Keyframe auf den Motor namens 'Root' angewendet, und nicht auf den Unterkörper selbst.

Posen werden in einer Keyframe angeordnet.Das bedeutet, die Pose's CFrame wird auf den Motor angewendet, der das Teil mit der Pose mit dem Teil verbindet, das mit der Pose des übergeordnetes Teilverbunden ist.Siehe unten für ein visuelles Beispiel der Struktur von Posen auf einem R15-Charakter.

CFrame-Position

Das Roblox-Animationssystem wendet Pose.CFrame auf die entsprechende Motor6D durch die Manipulation der relativen Transformation des Motors, der Motor6D.Transform Eigenschaftenan.Die ursprünglichen C0 und C1 Werte werden nicht geändert.

Code-Beispiele

This sample includes a function that will generate a 'blank' keyframe containing blank poses for all of the model's connected parts in the correct hierarchical order.

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)

This code sample includes a function to reset the CFrame of the Poses in a 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

Zusammenfassung

Eigenschaften

Eigenschaften von PoseBase übernommen

Methoden

Eigenschaften

CFrame

Parallel lesen

Diese CFrame gilt für die entsprechende Motor6D mit der Pose, wenn die Motor6D.Transform geändert wird.Die ursprünglichen Motor6D.C0 und Motor6D.C1 Werte werden nicht geändert.

Pose Objekte werden auf der Grundlage einer gemeinsamen Hierarchie angeordnet Keyframe.Das bedeutet, dass das Pose.CFrame auf den Motor angewendet wird, der das mit der Pose verbundene Teil mit dem mit der Pose verbundenen übergeordnetes Teilverbindet.

Methoden

AddSubPose

()

Fügt einem Unter Pose einem Unter Pose hinzu, indem es es zu ihm pflegt. Es ist funktional identisch mit dem Festlegen der neuen Pose Instance.Parent auf die Pose.

Beachten Sie, dass diese Funktion keine Fehler macht, wenn eine Instanz außer einem Pose als Positions参数 gegeben wird und sie erfolgreich verknüpft wird.

Parameter

pose: Instance

Das Pose wird hinzugefügt.

Standardwert: ""

Rückgaben

()

Code-Beispiele

This sample demonstrates quickly the Keyframe.AddPose, Keyframe.RemovePose and Pose.AddSubPose and Pose.RemoveSubPose functions. Note these are functionally equivalent to parenting and un-parenting the poses.

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

Gibt ein Array zurück, das alle Unter Poses enthält, die zu einem Pose hinzugefügt wurden.Dies ist funktional gleich wie die Verwendung der Instance:GetChildren() Funktion auf der Pose.

Hinweis: Diese Funktion gibt alle Kinder der Pose zurück, einschließlich nicht Class.Pose``Class.Instance|Instances, wenn es welche vorhanden sind.


Rückgaben

Instances

Ein Array von Sub Poses.

Code-Beispiele

This code sample includes a function to reset the CFrame of the Poses in a 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

RemoveSubPose

()

Entfernt ein Unter-Pose von der Pose durch Elternschaft an nil.Dies ist funktional identisch mit der Einstellung der neuen Pose auf Instance.Parent zu nil.

Hinweis: Wenn ein Instance andere als Pose als ein Pose Parameter verwendet wird, entfernt diese Funktion diesen Instance und bietet keine Fehler.

Parameter

pose: Instance

Die Pose zu entfernen.

Standardwert: ""

Rückgaben

()

Code-Beispiele

This sample demonstrates quickly the Keyframe.AddPose, Keyframe.RemovePose and Pose.AddSubPose and Pose.RemoveSubPose functions. Note these are functionally equivalent to parenting and un-parenting the poses.

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

Ereignisse