Pose
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Una posa tiene il CFrame applicato al Motor6D connesso al suo associato BasePart .La parte che viene controllata dipende dal nome della posa.
Le posizioni sono i blocchi di costruzione fondamentali delle animazioni e, con Keyframes, costituiscono KeyframeSequences .
Posizioni, articolazioni e gerarchia
Anche se una posa viene assegnata a un BasePart per nome, l'oggetto manipolato durante il riproduzione dell'animazione è in realtà quello Motor6D connesso a questa parte.Le rig di animazione si ramificano dalla parte principale del modello attraverso tali articolazioni.
In un Piattaforma di testpersonaggio R15, la parte radice è la HumanoidRootPart.Il LowerTorso è connesso alla HumanoidRootPart da un motore chiamato 'Root'.Pertanto, il CFrame di una Pose chiamata 'LowerTorso' in un Keyframe sarebbe applicato al motore chiamato 'Root', e non al LowerTorso stesso.
Le posizioni sono disposte in un Keyframe in base alla gerarchia congiunta.Questo significa, la posa CFrame del Pose viene applicata al motore che connette la parte associata alla posa alla parte associata al parentdella posa.Vedi qui sotto per un esempio visivo della struttura delle pose su un personaggio R15.
Posiziona CFrame
Il sistema di animazione Roblox applica Pose.CFrame alla corrispondente Motor6D manipolando la trasformazione relativa del motore, la ProprietàMotor6D.Transform.I valori originali C0 e C1 non vengono modificati.
Campioni di codice
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
Sommario
Proprietà
Questo CFrame si applica al Motor6D corrispondente con il Pose quando il Motor6D.Transform viene cambiato.
La direzione di allentamento da utilizzare per raggiungere il valore della prossima posa.
Lo stile di alleggerimento da utilizzare per raggiungere il valore della prossima posa.
Metodi
Proprietà
CFrame
Questo CFrame si applica al Motor6D corrispondente con il Pose quando il Motor6D.Transform viene cambiato.I valori originali Motor6D.C0 e Motor6D.C1 non vengono modificati.
Pose gli oggetti sono ordinati in un Keyframe in base alla gerarchia congiunta.Questo significa, che il Pose.CFrame viene applicato al motore che connette la parte associata alla posa alla parte associata al parentdella posa.
Metodi
AddSubPose
Aggiunge un sub Pose alla Pose da genitore, impostandolo su di essa. È funzionalmente identico a impostare la nuova posa Instance.Parent alla posa.
Nota, questa funzione non darà errore quando un'istanza diversa da una Pose viene data come parametro di posa e la genitorerà con successo.
Parametri
Restituzioni
Campioni di codice
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
Restituisce un array che contiene tutti i sottoclassi Poses che sono stati aggiunti a un Pose .Questo è funzionalmente lo stesso dell'utilizzo della funzione Instance:GetChildren() sulla Pose.
Nota: questa funzione restituisce tutti i figli del Pose , inclusi non Class.Pose``Class.Instance|Instances se qualcuno è presente.
Restituzioni
Un array di sub Poses .
Campioni di codice
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
Rimuove un sub Pose da Pose attraverso la genitorialità a nil .Questo è funzionalmente identico a impostare la nuova posa di Instance.Parent a nil .
Nota: se un Instance diverso da Pose viene utilizzato come parametro Pose, questa funzione rimuove quello Instance e non fornisce un errore.
Parametri
Restituzioni
Campioni di codice
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