Keyframe

Pokaż przestarzałe

*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

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)

Podsumowanie

Właściwości

  • Odczyt równoległy

    Pozycja czasowa Keyframe w animacja. Określa czas, w którym Poses w środku kluczowej ramy zostanie pokazany.

Metody

Właściwości

Time

Odczyt równoległy

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

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)

Metody

AddMarker

void

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

marker: Instance

Class.KeyframeMarker jako dziecko do Keyframe.


Zwroty

void

Przykłady kodu

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

void

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

pose: Instance

The Pose to be added.


Zwroty

void

Przykłady kodu

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

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

Instances

Materiały w niej zawarte są wszystkie KeyframeMarkers, które zostały dodane do Keyframe.

Przykłady kodu

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

Funkcja ta zwraca wszystkie Poses, które zostały dodane do Keyframe.


Zwroty

Instances

Materiały Poses .

Przykłady kodu

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

void

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

marker: Instance

Marker jest usuwany z Keyframe .


Zwroty

void

Przykłady kodu

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

void

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

pose: Instance

The Pose to be removed.


Zwroty

void

Przykłady kodu

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

Zdarzenia