Pose
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Une posture maintient la CFrame appliquée à la Motor6D connectée à son associé BasePart .La partie qui est contrôlée dépend du nom de la pose.
Les poses sont les blocs de construction fondamentaux des animations et, avec Keyframes, forment KeyframeSequences.
Poses, jointures et hiérarchie
Bien qu'une pose soit attribuée à un par son nom, l'objet manipulé lors de la lecture en boucle d'animation est en fait celui connecté à cette partie.Les branches d'animation se branchent à partir de la partie racine du modèlisationà travers de tels joints.
Dans un plateformede personnage R15, la partie racine est la partie racine humanoïde.Le LowerTorso est connecté à la partie racine humanoïde par un moteur nommé « Root ».Ainsi, le CFrame d'une posture nommée 'LowerTorso' dans un Keyframe serait appliqué au moteur nommé 'Root', et non pas au LowerTorso lui-même.
Les poses sont organisées en une Keyframe basée sur une hiérarchie commune.Cela signifie que la position de CFrame de la Pose est appliquée au moteur qui relie la partie associée à la position à la partie associée au parent de la position.Voir ci-dessous pour un exemple visuel de la structure des poses sur un personnage R15.
Pose de CFrame
Le système d'animation Roblox applique à la transformation relative du moteur, la propriété .Les valeurs originales C0 et C1 ne sont pas modifiées.
Échantillons de code
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
Résumé
Propriétés
Cette CFrame s'applique à la Motor6D correspondant à la Pose lorsque le Motor6D.Transform est modifié.
La direction de relâchement à utiliser pour atteindre la valeur de la prochaine pose.
Le style d'assouplissement à utiliser pour atteindre la valeur de la prochaine pose.
Méthodes
Propriétés
CFrame
Cette CFrame s'applique à la Motor6D correspondant à la Pose lorsque le Motor6D.Transform est modifié.Les valeurs originales Motor6D.C0 et Motor6D.C1 ne sont pas modifiées.
Pose les objets sont organisés en une Keyframe hiérarchie commune.Cela signifie que le Pose.CFrame est appliqué au moteur qui relie la partie associée à la pose à la partie associée au parent de la pose.
Méthodes
AddSubPose
Ajoute un sous Pose à la Pose en le parentant à elle. Il est fonctionnellement identique à la définition de la nouvelle pose Instance.Parent à la position.
Remarque, cette fonction ne rencontrera pas d'erreur lorsqu'une instance autre qu'une Pose sera donnée en tant que paramètre de pose et la parent avec succès.
Paramètres
Retours
Échantillons de code
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
Renvoie un tableau contenant tous les sous Poses qui ont été ajoutés à un Pose .C'est fonctionnellement la même chose que d'utiliser la fonction Instance:GetChildren() sur le Pose.
Remarque : cette fonction renvoie tous les enfants du Pose , y compris les non Class.Pose``Class.Instance|Instances s'ils sont présents.
Retours
Un ensemble de sous Poses .
Échantillons de code
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
Supprime une sous-partie Pose de la Pose par parentage à nil .C'est fonctionnellement identique à définir la nouvelle pose de Instance.Parent à nil.
Remarque : si un > autre que > est utilisé comme paramètre >, cette fonction supprime celui-ci et ne fournit pas d'erreur.
Paramètres
Retours
Échantillons de code
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