Aprenda
Classe do mecanismo
Keyframe

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.


Resumo
Propriedades
Membros herdados
Amostras de código
Geração de Poses de Keyframe
local function generateKeyframe(model)
if not model.PrimaryPart then
warn("Nenhuma parte primária definida")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Parte raiz não encontrada")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- obter todas as juntas conectadas à parte
for _, joint in pairs(part:GetJoints()) do
-- estamos interessados apenas em Motor6Ds
if joint:IsA("Motor6D") then
-- encontrar a 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
-- certifique-se de que não adicionamos essa parte
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- criar uma pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recursão
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- popular o 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)

Referência API
Propriedades
Time
Ler Parallel
Recursos: Animation
Keyframe.Time:number
Amostras de código
Obter Comprimento 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
Recursos: Animation
Keyframe:AddMarker(marker:Instance):()
Parâmetros
marker:Instance
Devolução
()
Amostras de código
Adicionar Marcador/Remover Marcador
local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) -- marcador.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) -- marcador.Parent = nil

AddPose
Recursos: Animation
Keyframe:AddPose(pose:Instance):()
Parâmetros
Devolução
()
Amostras de código
Geração de Poses de Keyframe
local function generateKeyframe(model)
if not model.PrimaryPart then
warn("Nenhuma parte primária definida")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Parte raiz não encontrada")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- obter todas as juntas conectadas à parte
for _, joint in pairs(part:GetJoints()) do
-- estamos interessados apenas em Motor6Ds
if joint:IsA("Motor6D") then
-- encontrar a 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
-- certifique-se de que não adicionamos essa parte
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- criar uma pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recursão
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- popular o 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)
Adicionar/Remover Pose de 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
Recursos: Animation
Keyframe:GetMarkers():{KeyframeMarker}
Devolução
Amostras de código
Obter Marcadores de Keyframe Anexados a um 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) -- imprime o nome do marcador
end

GetPoses
Recursos: Animation
Keyframe:GetPoses():{Pose}
Devolução
Amostras de código
Redefinir Poses de Keyframe
local function resetPoses(parent)
-- ambas as funções são 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()
-- recursão
resetPoses(pose)
end
end
end

RemoveMarker
Recursos: Animation
Keyframe:RemoveMarker(marker:Instance):()
Parâmetros
marker:Instance
Devolução
()
Amostras de código
Adicionar Marcador/Remover Marcador
local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) -- marcador.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) -- marcador.Parent = nil

RemovePose
Recursos: Animation
Keyframe:RemovePose(pose:Instance):()
Parâmetros
Devolução
()
Amostras de código
Adicionar/Remover Pose de 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

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.