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 Anahtar çerçevesi, bir animasyondaki belirli bir noktada uygulanan bağlara sahiptir.Keyframes animasyon oynatımı sırasında aralara yerleştirilir.

Not, çoğu durumda geliştiricilerin animasyon editörünün çoğu animasyon işlevini kapsadığı için KeyframeSequences 'yi manipüle etmelerine gerek yoktur.Ancak, bazı durumlarda bir geliştirici bir animasyon oluşturmak veya kendi eklentioluşturmak isteyebilir Script .

Yapı

Anahtar kareler bir KeyframeSequence içinde tutulur ve Pose nesneler içerir.Pozlar, uyumlu oldukları BaseParts ile adlandırılır ve ortak hiyerarşi açısından yapılandırılır.Bu, her bir Pose 'in bağlı olduğu parçaya karşılık gelen Pose 'e ebeveyn olması demektir.

Not, çünkü ile adlandırılırsa, animasyonlar doğru çalışması için farklı parça isimlerine ihtiyaç duyar.

Karıştırma

Animasyon oynatılırken farklı anahtarlardaki pozlar arasında geçiş yapılır.Bu, her kareyi tanımlamak zorunda olmadan pürüzsüz bir animasyonun oluşturulmasına izin verir.Not, interpolasyon stili Pose nesnesinde belirlenir.Anahtar çerçeve nesnesi sadece animasyondaki belirli bir noktada Poses 'yi tutar (Keyframe.Time).

Kod Örnekleri

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.

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 animasyondaki Keyframe saat konumu (saniyeler içinde) Bu, anahtar çerçevenin içinde gösterilecek süreyi belirler Poses.

Yöntemler

Özellikler

Time

Paralel oku

Bu özellik, bir animasyonda Keyframe saat pozisyonunu (saniyeler içinde) verir.Bu, anahtar çerçevenin içindeki Poses 'in gösterileceği süreyi belirler.

animasyonuzunluğunu belirlemek için Keyframe ile en yüksek zaman değerine sahip KeyframeSequence kullanılır.

Kod Örnekleri

This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.

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

()

Bu işlev, anahtar çerçeye ebeveynlik yaparak KeyframeMarker bir Keyframe ekler.İşlevsel olarak, işaretin Instance.Parent'ini Anahtar çerçevesine ayarmakla eşdeğerdir.

Not, bu işlev bir Anahtar Çerçeve İşaretleyici olmayan bir örnek verilirken parametre olarak ve başarıyla onu ebeveyn olarak verirken hata yapmayacaktır.

Anahtar kareler hakkında daha fazla bilgi

Keyframe isimlerin eşsiz olması gerekmez.Örneğin, bir Animasyon "Parçacıklar" olarak adlandırılan üç anahtar kareye sahipse, bağlı olay AnimationTrack:GetMarkerReachedSignal() tarafından her seferinde bu anahtar karelerden biri ulaştığında ateşlenecektir.

Keyframe adları, bir animasyon oluştururken veya düzenlerken Roblox Animasyon Editöründe ayarlanabilir.Bununla birlikte, oynatmadan önce mevcut bir animasyonda bir Script tarafından ayarlanamazlar.

Ayrıca bakın:

Parametreler

marker: Instance

Ebeveynliği yapılan KeyframeMarker , Keyframe 'ye.

Varsayılan değer: ""

Dönüşler

()

Kod Örnekleri

This example demonstrates the Keyframe:AddMarker() and Keyframe:RemoveMarker() functions. Note these are functionally equivalent to parenting and un-parenting the markers.

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

()

Bu işlev, anahtar çerçeye ebeveynlik yaparak Pose bir Keyframe ekler.Pozun Instance.Parent'unu anahtar kareye ayarlamakla işlevsel olarak aynıdır.

Not, bu işlev bir Pose örneği poz parametresi olarak verildiğinde hata yapmayacak ve başarıyla ebeveyn olacaktır.

Parametreler

pose: Instance

Eklenecek Pose .

Varsayılan değer: ""

Dönüşler

()

Kod Örnekleri

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.

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)

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.

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 eklendiği Keyframe 'ye tüm eklenen bir dizi döndürür.Not, bu işlev yalnızca instances tipi KeyframeMarker'ı döndürecektir.

Anahtar kareler hakkında daha fazla bilgi

Keyframe isimlerin eşsiz olması gerekmez.Örneğin, bir Animasyon "Parçacıklar" olarak adlandırılan üç anahtar kareye sahipse, bağlı olay AnimationTrack:GetMarkerReachedSignal() tarafından her seferinde bu anahtar karelerden biri ulaştığında ateşlenecektir.

Keyframe adları, bir animasyon oluştururken veya düzenlerken Roblox Animasyon Editöründe ayarlanabilir.Bununla birlikte, oynatmadan önce mevcut bir animasyonda bir Script tarafından ayarlanamazlar.

Ayrıca bakın:


Dönüşler

Instances

KeyframeMarkers , Keyframe 'ye eklenen tüm bir dizi içeren bir dizi.

Kod Örnekleri

This example demonstrates the Keyframe:AddMarker() and Keyframe:GetMarkers() functions. After adding two markers, marker1 and marker2 to the keyframe, this example gets and prints the names of the added markers.

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 Keyframe içine eklenen tüm Poses içeren bir dizi döndürür.


Dönüşler

Instances

Bir dizi Poses.

Kod Örnekleri

This code sample includes a function to reset the CFrame of the Poses in a 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

RemoveMarker

()

Bu işlev, ayarlarını 'ye ayarlayarak 'den bir kaldırır.

Anahtar çerçeve işaretleyicisinin Instance.Parent 'si nil 'ye ayarlandı, ancak yok edilmedi.Yani, işaret referans edildiğinde daha sonra yeniden ebeveyn olabilir.

Not, bu işlev bir Anahtar Çerçeve İşaretleyici olmayan bir örnek verildiğinde parametre olarak hata vermez.

Anahtar kareler hakkında daha fazla bilgi

Keyframe isimlerin eşsiz olması gerekmez.Örneğin, bir Animasyon "Parçacıklar" olarak adlandırılan üç anahtar kareye sahipse, bağlı olay AnimationTrack:GetMarkerReachedSignal() tarafından her seferinde bu anahtar karelerden biri ulaştığında ateşlenecektir.

Keyframe adları, bir animasyon oluştururken veya düzenlerken Roblox Animasyon Editöründe ayarlanabilir.Bununla birlikte, oynatmadan önce mevcut bir animasyonda bir Script tarafından ayarlanamazlar.

Ayrıca bakın:

Parametreler

marker: Instance

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

Varsayılan değer: ""

Dönüşler

()

Kod Örnekleri

This example demonstrates the Keyframe:AddMarker() and Keyframe:RemoveMarker() functions. Note these are functionally equivalent to parenting and un-parenting the markers.

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

()

Bu işlev, onu yok ederek Pose 'den bir Keyframe 'yi kaldırır, çünkü onun Instance.Parent 'ini nil 'ya ayarlar, yok edilmeden.Bu, verilen pozun referans edildiği ve daha sonra yeniden ebeveyn edilebileceği anlamına gelir.

Not, bu işlev bir Pose örneği poz parametri olarak verildiğinde hata vermeyecektir.

Parametreler

pose: Instance

Kaldırılması gereken Pose .

Varsayılan değer: ""

Dönüşler

()

Kod Örnekleri

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.

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