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

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

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

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

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

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

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

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

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

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