Aprender
Clase de motor
Keyframe

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.


Resumen
Propiedades
Miembros heredados
Muestras de código
Generador de Poses de Keyframe
local function generateKeyframe(model)
if not model.PrimaryPart then
warn("No hay parte primaria establecida")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Parte raíz no encontrada")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- obtener todas las juntas conectadas a la parte
for _, joint in pairs(part:GetJoints()) do
-- solo nos interesan los Motor6D
if joint:IsA("Motor6D") then
-- encontrar la parte conectada
local connectedPart = nil
if joint.Part0 == part then
connectedPart = joint.Part1
elseif joint.Part1 == part then
connectedPart = joint.Part0
end
if connectedPart then
-- asegurarnos de que no hemos añadido esta parte ya
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- crear una pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recursión
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- poblar el 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)

Referencia API
Propiedades
Time
Leer paralelo
Capacidades: Animation
Keyframe.Time:number
Muestras de código
Obtener la longitud de KeyframeSequence
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)

Métodos
AddMarker
Capacidades: Animation
Keyframe:AddMarker(marker:Instance):()
Parámetros
marker:Instance
Devuelve
()
Muestras de código
Añadir Marcador/Eliminar Marcador
local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "Paso"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

AddPose
Capacidades: Animation
Keyframe:AddPose(pose:Instance):()
Parámetros
Devuelve
()
Muestras de código
Generador de Poses de Keyframe
local function generateKeyframe(model)
if not model.PrimaryPart then
warn("No hay parte primaria establecida")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Parte raíz no encontrada")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- obtener todas las juntas conectadas a la parte
for _, joint in pairs(part:GetJoints()) do
-- solo nos interesan los Motor6D
if joint:IsA("Motor6D") then
-- encontrar la parte conectada
local connectedPart = nil
if joint.Part0 == part then
connectedPart = joint.Part1
elseif joint.Part1 == part then
connectedPart = joint.Part0
end
if connectedPart then
-- asegurarnos de que no hemos añadido esta parte ya
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- crear una pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recursión
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- poblar el 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)
Añadir/Quitar Pose de Fotograma Clave
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
Capacidades: Animation
Keyframe:GetMarkers():{KeyframeMarker}
Devuelve
Muestras de código
Obtener Marcadores de Fotogramas Clave Adjuntos a un Fotograma Clave
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
Capacidades: Animation
Keyframe:GetPoses():{Pose}
Devuelve
Muestras de código
Restablecer Poses de Keyframe
local function resetPoses(parent)
-- ambas funciones son equivalentes a 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
Capacidades: Animation
Keyframe:RemoveMarker(marker:Instance):()
Parámetros
marker:Instance
Devuelve
()
Muestras de código
Añadir Marcador/Eliminar Marcador
local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "Paso"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

RemovePose
Capacidades: Animation
Keyframe:RemovePose(pose:Instance):()
Parámetros
Devuelve
()
Muestras de código
Añadir/Quitar Pose de Fotograma Clave
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

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.