KeyframeSequence
*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.
Ten obiekt przechowuje wszystkie Keyframes na animację, określa, czy animacja jest powtarzana, i określa jej priorytet wobec innych animacji.
Co to jest sekwencja kluczowa?
Roblox konstruuje dane animacji, które używa w odtwarzaniu animacji, odwołując się do właściwości Animation.AnimationId z sekwencji kluczowej.Każda animacja odnosi się do sekwencji kluczowych lub do animacji krzywej wewnętrznieChociaż zwykle tworzone przez edytor animacji Roblox, sekwencja kluczowa może być również tworzona przez inne wtyczki lub nawet ręcznie.Po przesłaniu do Roblox Roblox przypisuje ID treści, które używa do odniesienia się do przesłanej sekwencji kluczy.
Pamiętaj, że w większości przypadków nie musisz manipulować sekwencjami kluczowymi, ponieważ edytor animacji pokrywa większość funkcjonalności animacji.Jednak w niektórych przypadkach możesz chcieć wygenerować animację z Script lub stworzyć własny dodatek plug-in.Jednak tylko Roblox Studio może używać sekwencji kluczowych stworzonych w taki sposób.Jeśli chcesz używać takiej sekwencji kluczowych, musisz ją przesłać do Roblox, jak opisano poniżej.
Właściwości kluczowej kolejki sekwencji
KeyframeSequence.Priority i KeyframeSequence.Loop zapisuj priorytetowe i powtarzalne ustawienia animacji dla sekwencji.Zauważ, że właściwości AnimationTrack mogą ostatecznie zastąpić te właściwości podczas odtwarzania.
Ostatni Keyframe w kolejności, oznaczający Keyframe z najwyższą właściwością Keyframe.Time, określa długość animacja.
Struktura kluczowej sekwencji ramy
Sekwencje kluczowe działają jako pojemnik, który przechowuje Keyframes.Kluczowe ramy reprezentują ramę "kluczową" w animacja, które są wstawiane pomiędzy podczas odtwarzania.
Kluczowe ramy zawierają Poses . , specyficzne dla każdego animowanego, zawierające zastosowane do łączenia dwóch części.Pozy pasują do BasePart odpowiadają nazwie i stosują swoje dane do Motor6D z tą samą nazwą części oznaczoną jako Motor6D.P1 .Z tego powodu animacje wymagają odrębnych nazw części, aby poprawnie działać.
Pozy są podporządkowane strukturze opartej na wspólnej hierarchii.Rodzic każdego Pose odpowiada Pose części, do której jest przymocowany.W praktyce oznacza to, że gałąź pozy staje się rozgałęziona z głównej części korzenia.Zobacz poniżej wizualny przykład.
Używanie sekwencji kluczowych podczas tworzenia animacji
Najpierw musisz przesłać sekwencje kluczowe do Roblox, zanim będą mogły zostać odtworzone w doświadczeniu.W Studio kliknij prawym przyciskiem na sekwencję kluczową i kliknij "Zapisz do Roblox".Alternatywnie możesz użyć funkcji Plugin:SaveSelectedToRoblox().Każda z metod wyświetli okno wysyłania animacji i pozwoli Ci przesłać KeyframeSequence jako animacja.
W niektórych przypadkach możesz chcieć zapoznać się z animacją przed przesłaniem jej na stronę Roblox.Możesz wygenerować tymczasowe ID za pomocą KeyframeSequenceProvider:RegisterKeyframeSequence().Spowoduje to wygenerowanie identyfikatora hasha, który można wykorzystać do lokalnych testów animacji.
Zdobywanie sekwencji kluczowych
W niektórych przypadkach możesz chcieć pobrać sekwencję kluczową odpowiadającą istniejącej przesłanej animacji.Możesz użyć AnimationClipProvider:GetAnimationClipAsync() do pobrania animacja.
Przykłady kodu
This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.
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)
This code sample contains a simple function to generate an Animation with a generated hash ID to preview a KeyframeSequence locally.
local KeyframeSequenceProvider = game:GetService("KeyframeSequenceProvider")
local function createPreviewAnimation(keyframeSequence)
local hashId = KeyframeSequenceProvider:RegisterKeyframeSequence(keyframeSequence)
local Animation = Instance.new("Animation")
Animation.AnimationId = hashId
return Animation
end
local keyframeSequence = Instance.new("KeyframeSequence")
local animation = createPreviewAnimation(keyframeSequence)
print(animation)
This sample demonstrates how a basic KeyframeSequence can be created.
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
Podsumowanie
Właściwości
Zawiera wysokość bioder modelu, który został użyty do autorowania tego .
Określa, czy animacja przechowana w tym AnimationClip jest przeznaczona do pętania.
Określa, który klip ma pierwszeństwo, gdy wiele animacji odtwarza się jednocześnie.
Metody
Dodaje Keyframe do KeyframeSequence poprzez adoptowanie go do KeyframeSequence.
Zwraca tablicę, która zawiera wszystkie Keyframes znajdujące się w KeyframeSequence .
Funkcja ta usuwa Keyframe z KeyframeSequence poprzez ustawienie jej rodzica na nil .
Właściwości
AuthoredHipHeight
Zawiera wysokość bioder modelu, który został użyty do autorowania tego .Domyślna wartość to 1.35, ponieważ jest to ustawienie wysokości biodła dla standardowego R15 Character|character .
Metody
AddKeyframe
Funkcja ta dodaje Keyframe do KeyframeSequence poprzez adoptowanie jej do KeyframeSequence.Jest funkcjonalnie identyczny z ustawieniem kluczowej ramy Instance.Parent do KeyframeSequence.
Uwaga: ta funkcja nie będzie błędna, gdy wezwana z inną instancją niż Keyframe jako parametr kluczowy i z powodzeniem ją rozpocznie.
Parametry
Zwroty
Przykłady kodu
This sample demonstrates how a basic KeyframeSequence can be created.
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
GetKeyframes
GetKeyframes zwraca tablicę, która zawiera wszystkie Keyframes, które zostały dodane do KeyframeSequence.
Zwroty
Matryca z Keyframe.
Przykłady kodu
This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.
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)
RemoveKeyframe
Funkcja ta usuwa Keyframe z KeyframeSequence poprzez ustawienie jej rodzica na nil .Jest funkcjonalnie identyczny z ustawieniem rodzica kluczówki na nil .
To ustawia rodzica kluczówki na nil, ale nie ją niszczy.Oznacza to, że pod warunkiem, że pozostanie inny odniesienie do kluczowej ramy, można ją później ponownie adoptować.
Uwaga: ta funkcja nie będzie błędna, gdy wezwana z innym Instance parametrem niż Keyframe jako parametr kluczowy.
Parametry
Zwroty
Przykłady kodu
This sample adds a Keyframe to a KeyframeSequence before removing it and adding it again. Note that once a Keyframe is removed it is not destroyed, meaning it can be re-added later.
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)