Keyframe

Artık kullanılmayanları göster

*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 Keyframe, bir animasyonun oynatıldığı belirli bir noktada birleştiriciye uygulanan Poses ile birleştiriciyi içerir. Model animasyon oynatılırken arasında yer alır.

Not, çoğu durumda geliştiricilerin KeyframeSequences animasyon editörüne ihtiyaç duymadığını ortaya çıkarır. Ancak, bazı durumlarda bir geliştirici animasyonu bir Script veya kendi özel eklenti'ini oluşturmak istiyabilir.

Yapı

Klavye şeritleri bir KeyframeSequence içine tutulur ve Pose nesneleri içerir. Klavye şeritleri, kendileştirme ile ilgili BaseParts ve yapı

Not, Poses olarak adlandırıldığı gibi, BaseParts eşdeğerlerine göre animasyonların doğru şekilde oynanması için ayrı parça isimleri gerekir.

Yer İşaretlemesi

Animasyon oynatırken, pozlar farklı kare çerçeveler arasında yer değiştirilir. Bu, her kareyi tanımlamak zorunda olmadan pürüzsüz bir animasyon oluşturmanızı sağlar. Not, stil değiştirme işlemi Pose nesnesinde belirlenir. Keyframe nes

Kod Örnekleri

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)

Özet

Özellikler

  • Paralel oku

    Bir animasyon içindeki Keyframe saat pozisyonu (saniye olarak). Bu, anahtar çerçevenin içindeki Poses ın gösterileceği saati belirler.

Yöntemler

Özellikler

Time

Paralel oku

Bu özellik bir animasyon içinde Keyframe saat pozisyonunu (saniye olarak) verir. Bu, anahtar çerçevenin içindeki Poses 'in gösterileceği saati belirler.

animasyonuzunluğunu belirlemek için bir Keyframe ile bir KeyframeSequence içindeki en yüksek zaman değerini kullanın.

Kod Örnekleri

Get KeyframeSequence Length

local function getSequenceLength(keyframeSequence)
local length = 0
for _, keyframe in pairs(keyframeSequence:GetKeyframes()) do
if keyframe.Time > length then
length = keyframe.Time
end
end
return length
end
local keyframeSequence = Instance.new("KeyframeSequence")
getSequenceLength(keyframeSequence)

Yöntemler

AddMarker

void

Bu işlev, bir KeyframeMarker ile Keyframe 'e bağlı olarak eklenir. İşlevsel olarak, işaretleyicinin Instance.Parent ile Keyframe'e ayarlanmasına eşdeğerdir.

Not, bu işlev bir Keyframe Marker'ın değil, bir öğe olarak verildiğinde hata vermez ve onu başarıyla ebeveyn olarak belirler.

Daha fazlasını öğrenmek için Keyframe'lar

Keyframe isimleri benzersiz olması gerekmez. Örneğin, bir Animasyonun "Particles" olarak adlandırılan üç anahtar çerçevesi varsa, AnimationTrack:GetMarkerReachedSignal() tarafından bağlanan her bir bu anahtar çerçevesi başarıyla yanıtlanır.

Keyframe isimleri, bir animasyonu oluştururken veya düzenlerken Roblox Animasyon Editorinde ayarlanabilir. Ancak, oyun öncesi bir Class.Script ismi bir varsa, oyunu oynayabilir.

Ayrıca bakınız:

Parametreler

marker: Instance

Class.KeyframeMarker olarak adlandırılan Keyframe ebeveyni.


Dönüşler

void

Kod Örnekleri

Add Marker/Remove Marker

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

AddPose

void

Bu işlev, bir Pose ı ebeveynine ekler ve bir Keyframe ın Instance.Parent ını ayarlar. Bu işlev, pozunun 2> Class.Instance.Parent2> ını ayarlamak ile aynıdı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

pose: Instance

Eklenmesi gereken Pose var.


Dönüşler

void

Kod Örnekleri

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

GetMarkers

Instances

Bu işlev, KeyframeMarkers iletken bir matrisi içerir. Bu işlev, sadece Keyframe ile gelen tüm instances ile gelen Keyframe Markerları içerir. Not, bu işlev sadece Keyframe Marker tipindeki 1> Class.Instance|instances1> ile gelen iletken bir matrisi içerir.

Daha fazlasını öğrenmek için Keyframe'lar

Keyframe isimleri benzersiz olması gerekmez. Örneğin, bir Animasyonun "Particles" olarak adlandırılan üç anahtar çerçevesi varsa, AnimationTrack:GetMarkerReachedSignal() tarafından bağlanan her bir bu anahtar çerçevesi başarıyla yanıtlanır.

Keyframe isimleri, bir animasyonu oluştururken veya düzenlerken Roblox Animasyon Editorinde ayarlanabilir. Ancak, oyun öncesi bir Class.Script ismi bir varsa, oyunu oynayabilir.

Ayrıca bakınız:


Dönüşler

Instances

Class.Keyframe ile eklendiğindeki tüm Keyframe içeren bir matris.

Kod Örnekleri

Get Keyframe Markers Attached to a Keyframe

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker1 = Instance.new("KeyframeMarker")
marker1.Name = "FootStep"
marker1.Value = 100
local marker2 = Instance.new("KeyframeMarker")
marker2.Name = "Wave"
marker2.Value = 100
keyframe:AddMarker(marker1) --marker.Parent = keyframe
keyframe:AddMarker(marker2) --marker.Parent = keyframe
local markers = keyframe:GetMarkers()
for _, marker in pairs(markers) do
print(marker.Name)
end

GetPoses

Instances

Bu işlev, bir Poses eklenecek tüm şeyleri içeren bir matrisi döndürür.


Dönüşler

Instances

Bir Poses matrisi.

Kod Örnekleri

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

RemoveMarker

void

Bu işlev, KeyframeMarker ının Keyframe ından bir Instance.Parent kaldırır, ayarlarının 2> Class.Instance.Parent2> ının üstüne yazılır.

Anahtar Çerçevelerinin Instance.Parent boştur, ancak yok edilmez. Bu, işaretçi referans edildiğinde yeniden ebeveyn edilebilir anlamına gelir.

Not, bir Keyframe Marker'ın dışındaki bir instans verildiğinde bu işlev hata vermez.

Daha fazlasını öğrenmek için Keyframe'lar

Keyframe isimleri benzersiz olması gerekmez. Örneğin, bir Animasyonun "Particles" olarak adlandırılan üç anahtar çerçevesi varsa, AnimationTrack:GetMarkerReachedSignal() tarafından bağlanan her bir bu anahtar çerçevesi başarıyla yanıtlanır.

Keyframe isimleri, bir animasyonu oluştururken veya düzenlerken Roblox Animasyon Editorinde ayarlanabilir. Ancak, oyun öncesi bir Class.Script ismi bir varsa, oyunu oynayabilir.

Ayrıca bakınız:

Parametreler

marker: Instance

İşaretleyici Keyframe 'den kaldırılıyor.


Dönüşler

void

Kod Örnekleri

Add Marker/Remove Marker

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

RemovePose

void

Bu işlev, bir Pose ı Keyframe 'ine ayarlayarak kaldırır, böylece onu yok etmeden önce Instance.Parent ile 2>nil2> arasında referanslanır. Bu, verilen pozunun referanslandığını ve daha sonra yeniden ebeveyn edilebildiğini ifade eder.

Not, bu işlev bir Pose olmayan bir instans verildiğinde poz poz verme özelliği olarak hata vermez.

Parametreler

pose: Instance

Kaldırılacak Pose olarak.


Dönüşler

void

Kod Örnekleri

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

Etkinlikler