Pose
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Bir Pose, uygulanan CFrame ile bağlantılı Motor6D 'e bağlı kalır. Kontrol edilen parça, Pose'nin ismini alır.
Oyun içi animasyonların temel yapı bloklarıdır ve Keyframes ile oluşur KeyframeSequences .
Oklar, katlar ve hierarşi
Bir Pose'un bir BasePart olarak adlandırıldığına rağmen, animasyon oynatma sırasında işlenen nesne aslında bu parçaya bağlanan Motor6D'dir. Animasyon rakipleri modelin kök parçasından bu yönlendirme aracılığıyla ayrılır.
R15 bir karakter rig'inde, kök parçası HumanoidRootPart'dir. Aşağı Torso, 'Root' adındaki bir motor tarafından bağlanmıştır HumanoidRootPart'e. Bu nedenle, 'LowerTorso' adlı bir pozunun bir CFrame içinde uygulanacaktır ve aşağı Torso'nun kendisi değil.
Oyunlar, ortak yerleşikliğe dayanarak Keyframe üzerine düzenlenmiştir. Bu, pozunun CFrame ile ilgili kısmının pozunun ebeveynine bağlanan kısmın üzerine uygulanması demektir. Aşağıda, R15 karakterinin pozunun aşağıdaki görsel örneğine bakını
CFrame'i Pose
Roblox animasyon sistemi, motorun relatif dönüşümünü manipüle ederek eşdeğer Class.Motor6D ile ilgili Class.Motor6D.Transform özelliğine uygulanır. Orijinal Class.JointInstance.C1|C0 ve Class.JointInstance.C1|C1 de
Kod Örnekleri
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
Özet
Özellikler
Şuradan alınan Özellikler: PoseBaseSonraki pozun değerine ulaşmak için kullanılan kolaylaştırma yönü.
Sonraki pozun değerine ulaşmak için kullanılan kolaylaştırma tarzı.
Yöntemler
Özellikler
CFrame
Bu Datatype.CFrame``Class.Motor6D ile eşdeğerdir. The original Pose ve 1> Class.Motor6D.C11> değerleri değiştirildiğinde değiş
Pose nesneleri, ortak sınıfına dayanarak Keyframe ile düzenlenir. Bu, şeklin pozasının pozanın ebeveynine bağlanan parçaya uygulanan Pose.CFrame ile ilgili olduğunu ifade eder.
Yöntemler
AddSubPose
Ebeveyni olarak Pose 'e ekler bir alt Instance.Parent ını, bu şekilde pozisyonun yeni pozisyonuna ayarlanır. Ebeveyni pozisyonun 1>Class.Instance.Parent1> ına ayarlanır.
Not, bu işlev bir Pose olmayan instansın poz poz parçası olarak verildiğinde hata vermez ve onu başarıyla ebeveyn olarak kabul eder.
Parametreler
Dönüşler
Kod Örnekleri
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
Bir Class.Pose Pose eklenmiş tüm alt şekilleri içeren bir matrisi içerir. Bu, Instance:GetChildren() kullanılan 1> Class.Instance:GetChildren() fonksiyonuna eşdeğerdir.
Not: Bu işlev, Pose ile ilgili tüm çocukları iade eder, bunlar Pose ile ilgili değilse.
Dönüşler
Bir alt Poses .
Kod Örnekleri
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
Sub Pose ının Class.Pose ından bir altından kaldırır. Bu, yeni pozunun Pose nının nil olarak ayarlanmasıyla işlevsel olarak aynıdır.
Not: Class.Instance başka bir Pose olarak kullanılırsa, bu işlev şunu kaldırır: Pose ve bir hata sağmaz.
Parametreler
Dönüşler
Kod Örnekleri
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