Pose
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
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>
Amostras de código
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)
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
Resumo
Propriedades
Esto CFrame aplica al Motor6D correspondiente con el Pose cuando el 1> Class.Motor6D.Transform1> es cambiado.
A direção de facilitação para usar para alcançar o valor da próxima Pose.
O estilo de facilitação para usar para alcançar o valor da próxima Pose.
Métodos
Propriedades
CFrame
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
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
Devolução
Amostras de código
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 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.
Devolução
Un array de sub Poses .
Amostras de código
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 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
Devolução
Amostras de código
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