Pose
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
A Pose holds the CFrame applied to the Motor6D connected to its associato BasePart . The part which is controlled depends on the name of the Pose.
I possono essere i blocchi di costruzione fondamentali delle animazioni e, con Keyframes , compongono KeyframeSequences .
Pose, articolazioni e gerarchia
Anche se un'BasePart viene assegnata a un Motor6D per nome, l'oggetto manipolato durante il playback dell'animazione è in realtà il Class.Motor6D connesso a questa parte. Le righe di animazione si sviluppano dalla parte radice del modello attraverso questi arti.
In un R15 character Piattaforma di test, the root part is the HumanoidRootPart. The LowerTorso è connesso alla HumanoidRootPart da un motore chiamato 'Root'. Quindi, il CFrame di una Pose chiamata 'LowerTorso' in un Keyframe sarebbe applicato al motore chiamato 'Root', non alla parte inferiore del torso stesso.
Le pose sono organizzate in un Keyframe basato sulla gerarchia congiunta. Ciò significa che la posa CFrame è applicata al motore che connette la parte associata alla posa alla parte associata alla posa's parent. Vedi sotto per un esempio visivo della struttura delle posizioni su un personaggio R15.
CFrame di posa
Il sistema di animazione Roblox applica Pose.CFrame al corrispondente 5> Class.Motor6D manipolando la trasformazione relativa del motore, la ProprietàMotor6D.Transform. I valori originali 1> Class.JointInstance.C1|C0
Campioni di codice
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
Sommario
Proprietà
Questo CFrame si applica al Motor6D corrispondente con il Pose quando il 1> Class.Motor6D.Transform1> è cambiato.
La direzione di facilezza da utilizzare per raggiungere il valore della prossima posa.
Lo stile di facilezza da utilizzare per raggiungere il valore della prossima Pose.
Metodi
Proprietà
CFrame
Questo CFrame si applica al Motor6D corrispondente con il Pose quando il 1> Class.Motor6D.Transform1> è cambiato. I valori originali 4> Class.Motor6D.
Pose oggetti sono disposti in un Keyframe basato sulla gerarchia congiunta. Ciò significa che il Pose.CFrame viene applicato al motore che connette la parte associata alla posa alla parte associata alla posa's parent.
Metodi
AddSubPose
Aggiunge un sub Pose a Class.Pose da padre in padre. È funzionalmente identico all'impostazione della nuova posa's Class.Instance.Parent alla posa.
Nota, questa funzione non si verrà errore quando un'istanza non a Pose viene data come parametro di posa e lo genereerà con successo.
Parametri
Restituzioni
Campioni di codice
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
Restituisce un array che contiene tutti i sub Poses che sono stati aggiunti a un Pose . Questo è funzionalmente lo stesso che usare la funzione Instance:GetChildren() sulla 1> Class.Pose1> .
Nota: questa funzione restituisce tutti i figli di Pose, tra cui non Class.Pose``Class.Instance|Instances se presenti.
Restituzioni
Un array di sub Poses .
Campioni di codice
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
Rimuove un sub Pose da Class.Pose da genitoriandolo a zero. Questo è funzionalmente identico all'impostazione della nuova posa's Class.Instance.Parent a zero.
Nota: Se un Instance diverso da Class.Pose viene utilizzato come Pose parametro, questa funzione rimuove che Pose e non fornisce un errore.
Parametri
Restituzioni
Campioni di codice
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