Pose
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Una postura mantiene el CFrame aplicado al Motor6D conectado a su asociado BasePart .La parte que se controla depende del nombre de la postura.
Las poses son los bloques de construcción fundamentales de las animaciones y, con Keyframes, constituyen KeyframeSequences .
Poses, articulaciones y jerarquía
Aunque una postura se asigna a un BasePart por nombre, el objeto manipulado durante la reproducción de animación es en realidad el Motor6D conectado a esta parte.Las rigs de animación se ramifican desde la parte raíz del aplicación de modeladoa través de tales articulaciones.
En un personaje rig, la parte raíz es la HumanoidRootPart.El torso inferior está conectado a la parte raíz humanoide por un motor llamado 'Root'.Por lo tanto, el CFrame de una postura llamada 'LowerTorso' en un Keyframe se aplicaría al motor llamado 'Root', y no al propio LowerTorso.
Las poses se organizan en una Keyframe basada en la jerarquía compartida.Esto significa que la postura CFrame de la Pose se aplica al motor que conecta la parte asociada con la postura a la parte asociada con el padre de la postura.Vea a continuación un ejemplo visual de la estructura de las poses en un personaje R15.
Pose de marco C
El sistema de animación de Roblox aplica Pose.CFrame a la correspondiente Motor6D manipulando la transformación relativa del motor, la propiedad Motor6D.Transform.Los valores originales C0 y C1 no se modifican.
Muestras de código
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.
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.
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
Resumen
Propiedades
Esta CFrame se aplica al Motor6D correspondiente con el Pose cuando se cambia el Motor6D.Transform.
La dirección de suavización para usar para alcanzar el valor de la próxima postura.
El estilo de suavización para usar para alcanzar el valor de la próxima postura.
Métodos
Propiedades
CFrame
Esta CFrame se aplica al Motor6D correspondiente con el Pose cuando se cambia el Motor6D.Transform.Los valores originales Motor6D.C0 y Motor6D.C1 no se modifican.
Pose objetos se organizan en una Keyframe basada en la jerarquía compartida.Esto significa, que el Pose.CFrame se aplica al motor que conecta la parte asociada con la postura a la parte asociada con el padre de la postura.
Métodos
AddSubPose
Añade un sub Pose a la Pose por medio de padrinazgo con él. Es funcionalmente idéntico a establecer el nuevo pose de Instance.Parent a la postura.
Nota, esta función no fallará cuando se dé una instancia diferente a una Pose como parámetro de posición y se la asigne con éxito.
Parámetros
Devuelve
Muestras de código
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.
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
Devuelve un array que contiene todos los sub Poses que se han agregado a un Pose .Esto es funcionalmente igual a usar la función Instance:GetChildren() en el Pose.
Nota: esta función devuelve todos los hijos del Pose , incluyendo no Class.Pose``Class.Instance|Instances si hay alguno presente.
Devuelve
Un array de sub Poses .
Muestras de código
This code sample includes a function to reset the CFrame of the Poses in a 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
RemoveSubPose
Elimina un sub Pose de la Pose por padrinazgo a nil .Esto es funcionalmente idéntico a establecer el nuevo posado de Instance.Parent a nil .
Nota: si se usa un Instance diferente de Pose como parámetro Pose, esta función elimina ese Instance y no proporciona un error.
Parámetros
Devuelve
Muestras de código
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.
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