Keyframe

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Ein Keyframe enthält die Poses , die auf Joints in einem Model angewendet werden in einer Animationen. Keyframes werden zwischen der Animation abgespielt.

Beachten Sie, dass in den meisten Fällen Entwickler nicht notieren müssen, um KeyframeSequences , da der Animations-Editor die meisten Animationsfunktionen abdeckt. In einigen Fällen möchte jedoch ein Entwickler eine Animation von einem Script oder einem eigenen Plug-inerstellen.

Struktur

Keyboards werden in einem KeyframeSequence gehalten und enthalten Pose Objekte. Die Posen sind nach der Bezeichnung der BaseParts korrespondieren und sind in Form einer gemeinsamen Hierarchie strukturiert. Dies bedeutet, dass jede 2>Class.Pose2> mit

Beachten Sie, dass Animationen, wie Poses nach dem Namen der BaseParts benannt sind, richtig funktionieren, dass Animationen korrekt abgespielt werden.

Interpolation

Während der Animation-Wiedergabe werden die Posen in verschiedenen Schlüsselrahmen miteinander interpoliert. Dies ermöglicht eine reibungslose Animation, ohne dass jedes Frame definiert werden muss. Beachten Sie, dass der Stil der Interpolation in dem Pose-Objekt bestimmt wird. Das Schlüsselrahmen-Objekt enthält nur das Poses an einer bestimmten Zeit im An

Code-Beispiele

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)

Zusammenfassung

Eigenschaften

  • Parallel lesen

    Die Keyframe Zeitposition (in Sekunden) in einer Animationen. Dies bestimmt die Zeit, in der die Poses innerhalb des Keyboards angezeigt wird.

Methoden

Eigenschaften

Time

Parallel lesen

Dieses Eigenschaft gibt der Keyframe Zeitposition (in Sekunden) in einer Animationen. Dies bestimmt die Zeit, in der die Poses innerhalb des Keyboards gezeigt wird.

Beachten Sie das Keyframe mit dem höchsten Zeitwert in einer KeyframeSequence wird verwendet, um die Länge der Animationenzu bestimmen.

Code-Beispiele

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)

Methoden

AddMarker

void

Diese Funktion fügt dem KeyframeMarker ein Keyframe hinzu, indem sie dem Instance.Parent durch Elternschaft hinzugefügt wird. Es ist funktional identisch, das Marker-2>Class.Instance.Parent2> an den Keyframe zu setzen.

Beachten Sie, dass diese Funktion nicht fehlerhaft ist, wenn eine Instanz andere als ein Keyframe-Marker als Parallel eingegeben wird, und wird erfolgreich übergeordnet.

Mehr über Keyframes

Keyframe Namen müssen nicht einzigartig sein. Zum Beispiel müssen Animationen, die drei Schlüsselrahmen mit dem Namen "Particles" haben, nicht einzigartig sein. Wenn ein solches Schlüsselrahmen mit dem Ereignis AnimationTrack:GetMarkerReachedSignal() verbunden wird, wird jedes Mal, wenn einer dieser Schlüsselrahmen erreicht wird, ein Feuerwerk abgefeuert.

Keyframe Namen können im Roblox Animation Editor festgelegt werden, wenn eine Animationenerstellt oder bearbeitet wird. Sie können jedoch nicht von einem Script auf einer bestehenden Animation vor dem Spielen festgelegt werden.

Siehe auch:

Parameter

marker: Instance

Der KeyframeMarker wird in der Keyframe übergeordnet.


Rückgaben

void

Code-Beispiele

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

Diese Funktion fügt dem Pose ein Keyframe hinzu, indem sie es mit dem Keyframe verknüpfen. Es ist funktional identisch, das Instance.Parent der Pose mit dem Keyframe zu setzen.

Beachten Sie, dass diese Funktion nicht fehlerhaft ist, wenn eine Instanz andere als eine Pose als Pose-Parameter gegeben wird und sie erfolgreich übergeordnet wird.

Parameter

pose: Instance

Die Pose zu fügen.


Rückgaben

void

Code-Beispiele

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

Diese Funktion gibt ein Array zurück, das alle KeyframeMarkers enthält, die dem Keyframe hinzugefügt wurden. Beachten Sie, dass diese Funktion nur instances von Typ Keyframe Marker zurückgibt.

Mehr über Keyframes

Keyframe Namen müssen nicht einzigartig sein. Zum Beispiel müssen Animationen, die drei Schlüsselrahmen mit dem Namen "Particles" haben, nicht einzigartig sein. Wenn ein solches Schlüsselrahmen mit dem Ereignis AnimationTrack:GetMarkerReachedSignal() verbunden wird, wird jedes Mal, wenn einer dieser Schlüsselrahmen erreicht wird, ein Feuerwerk abgefeuert.

Keyframe Namen können im Roblox Animation Editor festgelegt werden, wenn eine Animationenerstellt oder bearbeitet wird. Sie können jedoch nicht von einem Script auf einer bestehenden Animation vor dem Spielen festgelegt werden.

Siehe auch:


Rückgaben

Instances

Ein Array, das alle KeyframeMarkers enthält, die dem Keyframe hinzugefügt wurden.

Code-Beispiele

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

Diese Funktion gibt ein Array zurück, das alle Poses enthält, die zu einem Keyframe hinzugefügt wurden.


Rückgaben

Instances

Ein Array von Poses .

Code-Beispiele

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

Diese Funktion entfernt einen KeyframeMarker aus dem Keyframe durch Einstellungen, dass sein Instance.Parent auf null gesetzt ist.

Der Instance.Parent des Keyframe-Markers ist auf null gesetzt, aber er wird nicht zerstört. Dies bedeutet, dass, wenn der Marker später referenziert wird, er erneut Eltern werden kann.

Beachten Sie, dass diese Funktion nicht fehlerhaft ist, wenn ein Instanz andere als ein Keyframe-Marker als Parameter gegeben wird.

Mehr über Keyframes

Keyframe Namen müssen nicht einzigartig sein. Zum Beispiel müssen Animationen, die drei Schlüsselrahmen mit dem Namen "Particles" haben, nicht einzigartig sein. Wenn ein solches Schlüsselrahmen mit dem Ereignis AnimationTrack:GetMarkerReachedSignal() verbunden wird, wird jedes Mal, wenn einer dieser Schlüsselrahmen erreicht wird, ein Feuerwerk abgefeuert.

Keyframe Namen können im Roblox Animation Editor festgelegt werden, wenn eine Animationenerstellt oder bearbeitet wird. Sie können jedoch nicht von einem Script auf einer bestehenden Animation vor dem Spielen festgelegt werden.

Siehe auch:

Parameter

marker: Instance

Der Marker wird aus dem Keyframe entfernt.


Rückgaben

void

Code-Beispiele

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

Diese Funktion entfernt ein Pose aus dem Keyframe durch Setzen seines Instance.Parent auf 2>nil2>, ohne es zu zerstören. Dies bedeutet, dass die bereitgestellte Pose verwendet wird und sie später wieder Eltern werden kann.

Beachten Sie, dass diese Funktion nicht fehlerhaft ist, wenn eine Instanz andere als eine Pose als Positions参数 gegeben wird.

Parameter

pose: Instance

Die Pose zu entfernende.


Rückgaben

void

Code-Beispiele

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

Ereignisse