Pose
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
Uma postura mantém o CFrame aplicado ao Motor6D conectado a seu associado BasePart .A parte que é controlada depende do nome da Pose.
Poses são os blocos de construção fundamentais de animações e, com Keyframes, compõem KeyframeSequences.
Poses, articulações e hierarquia
Embora uma postura seja atribuída a um BasePart por nome, o objeto manipulado durante a reprodução de animação é na verdade o Motor6D conectado a esta parte.Rigs de animação se ramificam a partir da parte raiz do modelo através de tais articulações.
Em um personagem R15, a parte rig / plataforma / equipamentoé a HumanoidRootPart.O LowerTorso está conectado ao HumanoidRootPart por um motor chamado 'Root'.Portanto, o CFrame de uma Pose chamada 'LowerTorso' em um Keyframe seria aplicado ao motor chamado 'Root', e não ao próprio LowerTorso.
Poses são organizadas em um Keyframe com base na hierarquia conjunta.Isso significa que a Pose's CFrame é aplicada ao motor que conecta a peça associada à posição à peça associada ao pai da posição.Veja abaixo um exemplo visual da estrutura de Poses em um personagem R15.
Pose CFrame
O sistema de animação do Roblox aplica Pose.CFrame ao correspondente Motor6D manipulando a transformação relativa do motor, a propriedade Motor6D.Transform.Os valores originais C0 e C1 não são alterados.
Amostras 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
Resumo
Propriedades
Este CFrame se aplica ao Motor6D correspondente com o Pose quando o Motor6D.Transform for alterado.
A direção de relaxamento para usar para alcançar o valor da próxima Pose.
O estilo de relaxamento para usar para alcançar o valor da próxima Pose.
Métodos
Propriedades
CFrame
Este CFrame se aplica ao Motor6D correspondente com o Pose quando o Motor6D.Transform for alterado.Os valores originais Motor6D.C0 e Motor6D.C1 não são alterados.
Pose objetos são organizados em uma Keyframe com base em hierarquia conjunta.Isso significa que o Pose.CFrame é aplicado ao motor que conecta a peça associada à posição à peça associada ao pai da posição.
Métodos
AddSubPose
Adiciona um sub Pose ao Pose por meio de parentalidade, configurando-o para ele. É funcionalmente idêntico a definir o novo posicionamento Instance.Parent da posição.
Observe, essa função não dará erro quando uma instância diferente de uma Pose for dada como parâmetro de posição e a filiará com sucesso.
Parâmetros
Devolução
Amostras 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
Retorna um array que contém todos os sub Poses que foram adicionados a um Pose .Isso é funcionalmente o mesmo que usar a função Instance:GetChildren() na função Pose.
Nota: esta função retorna todos os filhos do Pose , incluindo não Class.Pose``Class.Instance|Instances se algum estiver presente.
Devolução
Um array de sub Poses .
Amostras 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
Remove um sub Pose de baixo do Pose por meio de parentalização para nil .Isso é funcionalmente idêntico a definir o novo posicionamento de Instance.Parent para nil.
Nota: Se um Instance diferente de Pose for usado como um parâmetro Pose, esta função remove esse Instance e não fornece um erro.
Parâmetros
Devolução
Amostras 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