KeyframeSequence
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Este objeto almacena todo el Keyframes para una animación, determina si la animación se repite, y determina su prioridad contra otras animaciones.
¿Qué es una secuencia de marcos clave?
Roblox construye los datos de animación que usa en la reproducción de una animaciones, referenciados por la propiedad Animation.AnimationId de una secuencia clave.Cada animación se refiere a una Secuencia de marcos clave o a una animación de curva internamente.Aunque, por lo general, creado por el Editor de animación de Roblox, KeyframeSequence también se puede crear por otros plugins o incluso manualmente.Una vez subido a Roblox, Roblox asigna un ID de contenido que Animations use para la propiedad Animation.AnimationId para referirse a la secuencia de claves subida.
Tenga en cuenta que, en la mayoría de los casos, no necesita manipular las secuencias de marco clave, ya que el editor de animaciones cubre la mayoría de la funcionalidad de animación.Sin embargo, en algunos casos es posible que desees generar una animación desde un Script o construir tu propio complemento.Sin embargo, solo Roblox Studio puede usar una secuencia de marcos clave creada de esa manera.Si desea utilizar una secuencia de marco de clave como esta, deberá subirla a Roblox como se describe a continuación.
Propiedades de la secuencia de marcos clave
KeyframeSequence.Priority y KeyframeSequence.Loop guarda las configuraciones de prioridad y animación en bucle para la secuencia.Tenga en cuenta que las propiedades AnimationTrack pueden eventualmente reemplazar estas propiedades al momento de reproducción.
El último Keyframe en la secuencia, lo que significa que el Keyframe con la propiedad más alta Keyframe.Time determina la duración de una animaciones.
Estructura de KeyframeSequence
Las secuencias de marco clave actúan como un contenedor que contiene Keyframes .Los marcos clave representan un marco clave en la animaciones, que se interpola entre durante la reproducción.
Los marcos de clave contienen Poses . Poses , específico para cada BasePart que se está animando, contiene el CFrame aplicado al Motor6D que conecta dos partes.Las poses coinciden con las BasePart que correspondan por nombre y aplican sus datos a la Motor6D con esta parte de nombre similar identificada como Motor6D.P1 .Por esta razón, las animaciones requieren nombres de partes distintos para jugar correctamente.
Las poses siguen una estructura basada en la jerarquía conjunta.El padre de cada Pose corresponde al Pose de la parte a la que se le adjunta.En la práctica, esto significa que la rama de poses se ramifica desde la parte raíz.Vea a continuación un ejemplo visual.
Usar secuencias de marco clave al hacer animaciones
Debes subir primero las secuencias de marco de clave a Roblox antes de que se puedan reproducir en una experiencia.En Studio, haz clic derecho en la secuencia de marcos clave y haz clic en 'Guardar en Roblox'.Alternativamente, puedes usar la función Plugin:SaveSelectedToRoblox().Cualquiera de los métodos mostrará la ventana de subida de animación y te permitirá subir tu KeyframeSequence como una animaciones.
En algunos casos, es posible que desees previsualizar una animación antes de subirla al sitio de Roblox.Puedes generar una identificación temporal usando KeyframeSequenceProvider:RegisterKeyframeSequence().Esto generará una identificación de hash que se puede utilizar para las pruebas de animación localizadas.
Obtención de secuencias de marco clave
En algunos casos, es posible que desees descargar la secuencia de marcos clave correspondiente a una animación subida existente.Puedes usar AnimationClipProvider:GetAnimationClipAsync() para descargar una animaciones.
Muestras de código
This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.
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)
This code sample contains a simple function to generate an Animation with a generated hash ID to preview a KeyframeSequence locally.
local KeyframeSequenceProvider = game:GetService("KeyframeSequenceProvider")
local function createPreviewAnimation(keyframeSequence)
local hashId = KeyframeSequenceProvider:RegisterKeyframeSequence(keyframeSequence)
local Animation = Instance.new("Animation")
Animation.AnimationId = hashId
return Animation
end
local keyframeSequence = Instance.new("KeyframeSequence")
local animation = createPreviewAnimation(keyframeSequence)
print(animation)
This sample demonstrates how a basic KeyframeSequence can be created.
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
Resumen
Propiedades
Contiene la altura de la cadera del Humanoid del modelo que se utilizó para autorizar este KeyframeSequence .
Determina si la animación almacenada en este AnimationClip está destinada a bucle.
Determina qué clip tiene prioridad cuando varias animaciones se reproducen simultáneamente.
Métodos
Añade un Keyframe a la KeyframeSequence por medio de la patria de ella al KeyframeSequence.
Devuelve un array que contiene todos los Keyframes contenidos en un KeyframeSequence .
Esta función elimina un Keyframe de la KeyframeSequence al establecer a su padre en nil .
Propiedades
AuthoredHipHeight
Contiene la altura de la cadera del Humanoid del modelo que se utilizó para autorizar este KeyframeSequence .El valor predeterminado es 1.35 ya que ese es el ajuste de altura de la cadera para un R15 estándar Character|character .
Métodos
AddKeyframe
Esta función agrega un Keyframe a la KeyframeSequence por medio de la patria de ella al KeyframeSequence.Es funcionalmente idéntico a establecer el marco de clave de Instance.Parent a KeyframeSequence.
Tenga en cuenta que esta función no fallará cuando se llame con una instancia diferente a una Keyframe como parámetro de marco clave y la padre con éxito.
Parámetros
Devuelve
Muestras de código
This sample demonstrates how a basic KeyframeSequence can be created.
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
GetKeyframes
GetKeyframes devuelve un array que contiene todos los Keyframes que se han agregado a un KeyframeSequence .
Devuelve
Un array de Keyframe .
Muestras de código
This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.
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)
RemoveKeyframe
Esta función elimina un Keyframe de la KeyframeSequence al establecer a su padre en nil .Es funcionalmente idéntico a establecer el padre del marco de clave en nil .
Esto establece al padre del fotograma claveen nil, pero no lo destruye.Esto significa, siempre que se mantenga otra referencia al marco clave, se puede reasignar más tarde.
Nota, esta función no fallará cuando se llame con un Instance diferente a un Keyframe como parámetro de marco clave.
Parámetros
Devuelve
Muestras de código
This sample adds a Keyframe to a KeyframeSequence before removing it and adding it again. Note that once a Keyframe is removed it is not destroyed, meaning it can be re-added later.
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)