Pose
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Poza trzyma CFrame zastosowany do Motor6D połączonego z jego powiązanym BasePart .Część, która jest kontrolowana, zależy od nazwy pozy.
Pozy są podstawowymi blokami budowlanymi animacji i, z Keyframes, tworzą KeyframeSequences.
Pozy, stawy i hierarchia
Chociaż poza jest przypisana do BasePart przez nazwę, obiekt manipulowany podczas odtwarzania animacji jest w rzeczywistości Motor6D połączony z tą częścią.Ramy animacji rozgałęziają się z głównej części modelu za pomocą takich połączeń.
W ramach postaci R15, część korzenna to HumanoidRootPart.Dolny tułów jest połączony z ludzką częścią korzeniową za pomocą silnika o nazwie "Root".Dlatego CFrame z pozy o nazwie 'LowerTorso' w Keyframe zostanie zastosowany do silnika o nazwie 'Root', a nie do samej pozy 'LowerTorso'.
Pozy są układane w Keyframe w oparciu o wspólną hierarchię.Oznacza to, że CFrame Pose jest zastosowany do silnika łączącego część związaną z pozą z częścią związaną z rodzicem pozy.Zobacz poniżej wizualny przykład struktury pozy na postaci R15.
Poza CFrame
System animacji Roblox stosuje Pose.CFrame do odpowiedniej Motor6D transformacji silnika, właściwości Motor6D.Transform.Oryginalne wartości C0 i C1 nie są zmieniane.
Przykłady kodu
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
Podsumowanie
Właściwości
To CFrame dotyczy odpowiedniego Motor6D w przypadku, gdy Pose zostanie zmienione, gdy Motor6D.Transform jest zmieniane.
Kierunek łagodzenia, który należy użyć, aby osiągnąć wartość następnej pozy.
Styl łagodzenia do użycia, aby osiągnąć wartość następnej pozy.
Metody
Właściwości
CFrame
To CFrame dotyczy odpowiedniego Motor6D w przypadku, gdy Pose zostanie zmienione, gdy Motor6D.Transform jest zmieniane.Oryginalne wartości Motor6D.C0 i Motor6D.C1 nie są zmieniane.
Pose obiekty są zorganizowane w Keyframe na podstawie wspólnej hierarchii.Oznacza to, że Pose.CFrame jest zastosowany do silnika łączącego część związaną z pozą z częścią związaną z rodzicem pozy.
Metody
AddSubPose
Dodaje podrzędny Pose do Pose poprzez przypisanie go do niego. Jest funkcjonalnie identyczny z ustawieniem nowej pozy Instance.Parent do pozy.
Uwaga: ta funkcja nie wystąpi błąd, gdy jako parametr pozy podany zostanie inny niż Pose instancja i zostanie ją pomyślnie rozpoczęta.
Parametry
Zwroty
Przykłady kodu
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
Zwraca array zawierający wszystkie pod Poses które zostały dodane do Pose .Jest to funkcjonalnie takie samo, jak korzystanie z funkcji Instance:GetChildren() na Pose.
Uwaga: ta funkcja zwraca wszystkie dzieci Pose , w tym nie Class.Pose``Class.Instance|Instances jeśli którekolwiek istnieją.
Zwroty
Zbiór pod Poses .
Przykłady kodu
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
Usuwa podrzędny Pose z Pose poprzez adoptowanie go do nil .Jest to funkcjonalnie identyczne z ustawieniem nowej pozy Instance.Parent do nil.
Uwaga: Jeśli Instance inny niż Pose zostanie użyty jako parametr Pose, ta funkcja usuwa ten Instance i nie zapewnia błędu.
Parametry
Zwroty
Przykłady kodu
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