Keyframe
*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
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à
Metodi
Aggiunge un KeyframeMarker a Class.Keyframe da padre, aggiungendolo alla Fotogramma chiave.
Aggiunge un Pose a Class.Keyframe da padre, aggiungendolo alla Fotogramma chiave.
Restituisce un array che contiene tutti KeyframeMarkers che sono stati aggiunti al Keyframe .
Restituisce un array che contiene tutti Poses che sono stati aggiunti a un Keyframe .
Rimuove un KeyframeMarker dal Keyframe impostando il suo Instance.Parent su null.
Rimuove un Pose da Class.Keyframe impostando il suo Keyframe su null.
Proprietà
Time
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
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
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
Il KeyframeMarker essendo parented al Keyframe .
Restituzioni
Campioni di codice
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
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
Restituzioni
Campioni di codice
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
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
Un array che contiene tutti KeyframeMarkers che sono stati aggiunti al Keyframe .
Campioni di codice
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
Questa funzione restituisce un array che contiene tutti Poses che sono stati aggiunti a un Keyframe .
Restituzioni
Un array di Poses .
Campioni di codice
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
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
Restituzioni
Campioni di codice
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
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
Restituzioni
Campioni di codice
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