Pose

Pokaż przestarzałe

*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.

Pose hold the CFrame applied to the Motor6D connected to its associates BasePart . The part which is controlled depends on the name of the Pose.

Pozy są podstawowymi blokami budowania animacji i, z Keyframes , stanowią KeyframeSequences .

Pozy, łączenia i hierarchia

Chociaż pozycja jest przypisana do BasePart przez imię, obiekt manipulowany podczas odtwarzania animacji jest właściwie Motor6D połączony z tą częścią. Rozdziały animacji gałęzą się z części korzenia modelu poprzez takie łączenia.

W rygorym charakterze R15 część korzenia jest HumanoidRootPart. Dolny Torso jest połączony z HumanoidRootPart przez silnik nazyający się 'Root'. Dlatego więc CFrame Pose nazyającą Keyframe w Class.Keyframe będzie zastosowany do silnika nazyjącego się 2>Root2>, a nie samego Torso.

Pozy są zorganizowane w Keyframe na bazie wspólnej hierarchii. Oznacza to, że Pose's CFrame jest zastosowany do silnika połączącego część związaną z pozą z częścią związaną z matką pozostałej części. Zobacz poniżej dla wizualnego przykładu struktury pozy na rysunku postaci R15.

Pose CFrame

System animacji Roblox stosuje Pose.CFrame do odpowiedniego Motor6D poprzez manipulację relatywnej transformacji silnika, właściwości Motor6D.Transform. Oryginalne wartości 1> Class.JointInstance.

Przykłady kodu

Keyframe Generate Poses

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)
Keyframe Reset Poses

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

Właściwości odziedziczeni z: PoseBase

Metody

Właściwości

CFrame

Odczyt równoległy

Ten CFrame stosuje się do Motor6D odpowiadającego z Pose gdy 1> Class.Motor6D.Transform1> jest zmieniony. Oryginalne wartości 4> Class.Motor6D.C0</

Obiekty Class.Pose są zorganizowane w Class.Keyframe na bazie wspólnej hierarchii. Oznacza to, że Class.Pose.CFrame jest stosowany do silnika połączącego część związaną z pozą z częścią związaną z matką pozostałej pozy.

Metody

AddSubPose

void

Doduje subt Pose do Pose poprzez ustanowienie go jako jego ojca. Jest funkcjonalnie identyczny z ustawieniem nowej pozy Instance.Parent pozy.

Uwaga, ta funkcja nie będzie błędować, gdy instancja inna niż Pose zostanie podana jako parametr pozy i będzie go prawidłowo podrębnić.

Parametry

pose: Instance

The Pose to be added.


Zwroty

void

Przykłady kodu

Keyframe Add/Remove Pose

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

Instances

Zwraca arkusz zawierający wszystkie sub Poses , które zostały dodane do Pose . To jest funkcjonalnie tak samo jak używanie funkcji Instance:GetChildren() na 1> Class.Pose1> .

Uwaga: ta funkcja zwraca wszystkie dzieci z Pose , w tym nie Class.Pose``Class.Instance|Instances jeśli są obecne.


Zwroty

Instances

Materiały w poddziałach Poses .

Przykłady kodu

Keyframe Reset Poses

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

void

Usuwa subt Pose z Pose poprzez ustanowienie go jako ojca. Jest to funkcjonalnie identyczne z ustawieniem nowej pozy Instance.Parent na nil.

Uwaga: Jeśli inny niż Pose Class.Instance jest używany jako parametr Pose, ta funkcja usuwa ten 1>Class.Instance1> i nie dostarcza błędu.

Parametry

pose: Instance

The Pose to be removed.


Zwroty

void

Przykłady kodu

Keyframe Add/Remove Pose

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

Zdarzenia