Pose

Mostrar obsoleto

*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 Pose mantiene el CFrame aplicado a la Motor6D conectada a su parte asociada BasePart. La parte que se controla depende del nombre de la Pose.

Las poses son los bloques de construcción básicos de las animaciones y, con Keyframes , constituyen KeyframeSequences .

Poses, articulaciones y jerarquías

Aunque una Pose 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 ramas de los modelos se extienden desde la parte raíz del aplicación de modeladoa través de tales juntas.

En una máquina R15, la parte inferior del torso está conectada a la parte superior por un motor llamado 'Root'. Por lo tanto, el CFrame de una posición nombrada 'LowerTorso' en una Keyframe se aplicaría a la parte superior del motor, no a la parte inferior del torso.

Las poses se organizan en un Keyframe basado en la jerarquía conjunta. Esto significa que la posición CFrame de la posición se aplica a la motor conectando la parte asociada a la posición a la parte asociada a la posición de su padre. Vea a continuación un ejemplo visual de la estructura de las poses en un personaje R15.

CFrame de postura

El sistema de animación de Roblox aplica Pose.CFrame a la correspondiente 5> Class.Motor6D manipulando la transformación relativa del motor, la propiedad Motor6D.Transform. Los valores originales 1> Class.JointInstance.C1|C01>

Muestras de código

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

Resumen

Propiedades

Propiedades heredados de PoseBase

Métodos

Propiedades

CFrame

Leer paralelo

Esto CFrame aplica al Motor6D que coincide con el Pose cuando el 1> Class.Motor6D.Transform1> es cambiado. Los valores originales de 4> Class.Motor6D.C0

Pose objetos están organizados en un Keyframe basado en la jerarquía compartida. Esto significa que el Pose.CFrame se aplica al motor que conecta la parte asociada con la posición a la parte asociada con la posición de su padre.

Métodos

AddSubPose

void

Agrega un sub Pose a la Pose por medio de la cual lo padreiza. Es funcionalmente idéntico a la configuración de la nueva posición de Instance.Parent a la posición.

Nota, esta función no se equivocará cuando se le dé una instancia que no sea un Pose como parámetro de posición y lo padresca con éxito.

Parámetros

pose: Instance

El Pose para agregar.


Devuelve

void

Muestras de código

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

Devuelve un arreglo que contiene todos los sub Poses que se han agregado a un Pose . Esto es funcionalmente lo mismo que usar la función Instance:GetChildren() en el 1> Class.Pose1> .

Nota: esta función regresa todos los hijos de la Pose , incluido el no Class.Pose``Class.Instance|Instances si es que hay alguno presente.


Devuelve

Instances

Un array de sub Poses .

Muestras de código

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

Elimina un sub Pose de la Pose por padres, esto es funcionalmente idéntico a la configuración de la nueva postura de Instance.Parent a nil.

Nota: Si se usa un Instance diferente de Pose como parámetro de Pose, esta función elimina ese 2>Class.Instance2> y no proporciona un error.

Parámetros

pose: Instance

El Pose para eliminar.


Devuelve

void

Muestras de código

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

Eventos