Keyframe

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Un Keyframe contiene il Poses applicato alle articolazioni in un Model a un punto di tempo specificato in un'animazioni. Keyframes sono interpolati durante il playback dell'animazione.

Nota, nella maggior parte dei casi gli sviluppatori non hanno bisogno di manipolare KeyframeSequences poiché l'animatore copre la maggior parte della funzionalità di animazione. Tuttavia, in alcuni casi un sviluppatore potrebbe voler generare un'animazione da un Script o creare il proprio Collegare.

Structure

I keyframe sono contenuti in un KeyframeSequence e contengono Pose oggetti. Le posizioni sono nominate in base alla posizione corrispondente e sono strutturate in termini di gerarchia congiunta. Ciò significa che ogni BaseParts è parented al 2>Class

Nota, come Poses sono nominati in base alle BaseParts a cui corrispondono, le animazioni richiedono nomi distinti delle parti per essere visualizzate correttamente.

Interpolazione

Durante la riproduzione dell'animazione, le posizioni in diverse keyframe vengono interpolate tra. Ciò consente una animazione fluida che non deve essere definita per ogni frame. Nota, lo stile di interpolazione viene determinato nell'oggetto Pose . L'oggetto Keyframe contiene semplicemente la posizione Poses in un punto di tempo definito nell'animazione ( Class.Key

Campioni di codice

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)

Sommario

Proprietà

  • Lettura Parallela

    La posizione temporale Keyframe (in secondi) in un'animazioni. Questo determina il momento in cui il Poses all'interno della keyframe sarà mostrato.

Metodi

Proprietà

Time

Lettura Parallela

Questa proprietà fornisce la posizione temporale Keyframe in un'animazioni. Ciò determina il momento in cui il Poses all'interno della keyframe sarà mostrato.

Nota il Keyframe con il valore di tempo più alto in una KeyframeSequence è usato per determinare la lunghezza dell'animazioni.

Campioni di codice

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)

Metodi

AddMarker

void

Questa funzione aggiunge un KeyframeMarker alla Keyframe da cui è parented to the Fotogramma chiave. È funzionalmente identico to setting the marker's Instance.Parent to the Keyframe.

Nota, questa funzione non si verrà errore quando un'istanza non Keyframe Marker viene data come parametro e lo genere con successo.

Altro su Keyframe

Keyframe i nomi non devono essere unici. Ad esempio, se un'animazione ha tre keyframe chiamati "Particles" l'evento connesso restituito da AnimationTrack:GetMarkerReachedSignal() attiva ogni volta che uno di questi keyframe viene raggiunto.

Keyframe i nomi possono essere impostati nell'Editor Animation Roblox quando si crea o si modifica un'animazioni. Tuttavia, non possono essere impostati da un Script su un'animazione esistente prima di giocarci.

Vedi anche:

Parametri

marker: Instance

Il KeyframeMarker essendo parented al Keyframe .


Restituzioni

void

Campioni di codice

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

Questa funzione aggiunge un Pose a Class.Fotogramma chiave da genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere padre in genere Fotogramma chiavein genere

Nota, questa funzione non si verrà errore quando un'istanza non a Pose viene data come parametro di posa e lo genereerà con successo.

Parametri

pose: Instance

Il Pose da aggiungere.


Restituzioni

void

Campioni di codice

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

Questa funzione restituisce un array che contiene tutti KeyframeMarkers che sono stati aggiunti al Keyframe . Nota, questa funzione restituirà solo instances di tipo KeyframeMarker.

Altro su Keyframe

Keyframe i nomi non devono essere unici. Ad esempio, se un'animazione ha tre keyframe chiamati "Particles" l'evento connesso restituito da AnimationTrack:GetMarkerReachedSignal() attiva ogni volta che uno di questi keyframe viene raggiunto.

Keyframe i nomi possono essere impostati nell'Editor Animation Roblox quando si crea o si modifica un'animazioni. Tuttavia, non possono essere impostati da un Script su un'animazione esistente prima di giocarci.

Vedi anche:


Restituzioni

Instances

Un array che contiene tutti KeyframeMarkers che sono stati aggiunti al Keyframe .

Campioni di codice

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

Questa funzione restituisce un array che contiene tutti Poses che sono stati aggiunti a un Keyframe .


Restituzioni

Instances

Un array di Poses .

Campioni di codice

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

Questa funzione rimuove un KeyframeMarker dal Keyframe impostando il suo Instance.Parent a zero.

Il Instance.Parent di The Keyframe Marker è impostato su null, ma non è distrutto. Ciò significa che, se il marker è riferito, può essere re-genitore più tardi.

Nota che questa funzione non si verrà errore quando un'istanza o un Keyframe Marker viene fornito come parametro.

Altro su Keyframe

Keyframe i nomi non devono essere unici. Ad esempio, se un'animazione ha tre keyframe chiamati "Particles" l'evento connesso restituito da AnimationTrack:GetMarkerReachedSignal() attiva ogni volta che uno di questi keyframe viene raggiunto.

Keyframe i nomi possono essere impostati nell'Editor Animation Roblox quando si crea o si modifica un'animazioni. Tuttavia, non possono essere impostati da un Script su un'animazione esistente prima di giocarci.

Vedi anche:

Parametri

marker: Instance

Il marker being removed from the Keyframe .


Restituzioni

void

Campioni di codice

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

Questa funzione rimuove un Pose da Class.Keyframe impostando il suo Keyframe su nil senza distruggerlo. Ciò significa che la posa fornita è riferita e può essere riferita più tardi.

Nota, questa funzione non si verrà errore quando un'istanza non a Pose viene data come parametro di posa.

Parametri

pose: Instance

Il Pose da rimuovere.


Restituzioni

void

Campioni di codice

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

Eventi