Keyframe
*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.
Klucz Frame uдерuje Poses zastosowane do łączników w Model na określonym czasie w animacja. Keyframes są interpolowane podczas odtwarzania animacji.
Uwaga, w większości przypadków nie ma potrzeby manipulowania KeyframeSequences , ponieważ animator pokrywa większość funkcji animacji. W niektórych przypadkach może jednak pożądać generowania animacji z Script lub zbudować własny dodatek plug-in.
Struktura
Kluczowe ramy są umieszczone w KeyframeSequence i zawierają Pose obiektów. Pozy są nazywane zgodnie z BaseParts do których odpowiadają i są strukturyzowane według wspólnej hierarchii. To oznac
Uwaga, ponieważ Poses są nazywane zgodnie z BaseParts do których odpowiadają, wymagają one odpowiednich imion części, aby grać poprawnie.
Przerobienie
Podczas odtwarzania animacji pozy w różnych kluczowych ramach są łączone między sobą. Umożliwia to stworzenie gładkiej animacji bez konieczności określenia każdej ramy. Uwaga, styl interpolacji jest określony w obiekcie Pose . Obiekt Keyframe po prostu utrzymuje Poses na okre
Przykłady kodu
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)
Podsumowanie
Właściwości
Metody
Doduje KeyframeMarker do Keyframe poprzez jego przywiązanie do kluczowej ramy.
Doduje Pose do Keyframe poprzez jego przywiązanie do kluczowego ramy.
Zwraca arkusz zawierający wszystkie KeyframeMarkers, które zostały dodane do Keyframe.
Zwraca arkusz zawierający wszystkie Poses, które zostały dodane do Keyframe.
Usuwa KeyframeMarker z Keyframe ustawień, aby ustawić jego Instance.Parent na nil.
Usuwa Pose z Keyframe ustawiając jego Instance.Parent na nil.
Właściwości
Time
Ta właściwość określa pozycję czasu Keyframe w animacja. Określa to czas, w którym Poses w środku kluczowej ramy zostanie pokazany.
Zauważ Keyframe z najwyższą wartością czasową w KeyframeSequence używany do określenia długości animacja.
Przykłady kodu
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)
Metody
AddMarker
Funkcja ta dodaje KeyframeMarker do Keyframe poprzez ustanowienie jej jako Instance.Parent dla kluczowej ramy. Jest ona funkcjonalnie identyczna z ustawieniem 2> Class.Instance.Parent2> dla ramy kluczowej.
Uwaga, ta funkcja nie będzie błędna, gdy instancja inna niż Keyframe Marker zostanie jako parametr przekazany i będzie go prawidłowo podążać.
Więcej o Keyframes
Keyframe imiona nie muszą być unikalne. Na przykład, jeśli animacja ma trzy kluczowe ramy nazwane „Particles” załączony wydarzenie zwrócił przez AnimationTrack:GetMarkerReachedSignal() będzie działać każdym razem, gdy jeden z tych kluczowych ram jest osiągnięty.
Keyframe może być ustawiona w Roblox Animation Editor podczas tworzenia lub edytowania animacja. Nie może jednak być ustawiona przez Script na istniejącej animacji przed jej uruchomieniem.
Zobacz również:
Parametry
Zwroty
Przykłady kodu
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
Funkcja ta dodaje Pose do Keyframe poprzez ustanowienie jej jako Instance.Parent dla kluczowej ramy. Jest to funkcjonalnie identyczne z ustawieniem 2> Class.Instance.Parent2> dla kluczowej ramy.
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
Zwroty
Przykłady kodu
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 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
Funkcja ta zwraca wielką listę zawierającą wszystkie KeyframeMarkers, które zostały dodane do Keyframe. Uwaga, ta funkcja zwraca tylko instances typu KeyframeMarker.
Więcej o Keyframes
Keyframe imiona nie muszą być unikalne. Na przykład, jeśli animacja ma trzy kluczowe ramy nazwane „Particles” załączony wydarzenie zwrócił przez AnimationTrack:GetMarkerReachedSignal() będzie działać każdym razem, gdy jeden z tych kluczowych ram jest osiągnięty.
Keyframe może być ustawiona w Roblox Animation Editor podczas tworzenia lub edytowania animacja. Nie może jednak być ustawiona przez Script na istniejącej animacji przed jej uruchomieniem.
Zobacz również:
Zwroty
Materiały w niej zawarte są wszystkie KeyframeMarkers, które zostały dodane do Keyframe.
Przykłady kodu
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
Funkcja ta zwraca wszystkie Poses, które zostały dodane do Keyframe.
Zwroty
Materiały Poses .
Przykłady kodu
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
Funkcja ta usuwa KeyframeMarker z Keyframe ustawień, aby ustawić jego Instance.Parent na nil.
Marker Keyframe'a Instance.Parent ustawiony jest na nil, ale nie jest zniszczony. Oznacza to, że jeśli znacznik jest odniesiony, można go później ponownie rodzic.
Uwaga, ta funkcja nie będzie błędna, gdy instancja inna niż Keyframe Marker zostanie podana jako parametr.
Więcej o Keyframes
Keyframe imiona nie muszą być unikalne. Na przykład, jeśli animacja ma trzy kluczowe ramy nazwane „Particles” załączony wydarzenie zwrócił przez AnimationTrack:GetMarkerReachedSignal() będzie działać każdym razem, gdy jeden z tych kluczowych ram jest osiągnięty.
Keyframe może być ustawiona w Roblox Animation Editor podczas tworzenia lub edytowania animacja. Nie może jednak być ustawiona przez Script na istniejącej animacji przed jej uruchomieniem.
Zobacz również:
Parametry
Zwroty
Przykłady kodu
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
Funkcja ta usuwa Pose z Keyframe poprzez ustawienie jego Instance.Parent na 2>nil2>, bez go uszkodzenia. Oznacza to, że dostarczona pozy jest odniesiona i można ją później odnowić.
Uwaga, ta funkcja nie będzie błędna, gdy instancja inna niż Pose zostanie podana jako parametr pozy.
Parametry
Zwroty
Przykłady kodu
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