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í.
Un Keyframe contiene el Poses aplicado a las articulaciones en un Model en un momento de tiempo específico en una animaciones. Keyframes están interpolados entre durante el tiempo de reproducción de la animación.
Nota, en la mayoría de los casos los desarrolladores no necesitan manipular KeyframeSequences ya que el editor de animación cubre la mayoría de la funcionalidad de animación. Sin embargo, en algunos casos un desarrollador puede desear generar una animación desde un Script o construir su propio complemento.
Estructura
Las keyframes se encuentran dentro de un KeyframeSequence y contienen Pose objetos. Las poses se nombran según la jerarquía de la base y están estructuradas según el término de la conjunción. Esto significa que cada BaseParts es padre del 2>
Nota, como Poses se nombran según el nombre del BaseParts al que se refieren, las animaciones requieren nombres de partes distintas para jugar correctamente.
Interpolación
Durante la reproducción de animación, las poses en diferentes marcos de tiempo se interpolan entre sí. Esto permite crear una animación sin necesidad de definir cada marco. Nota, el estilo de interpolación se determina en el objeto Pose . El objeto Keyframe simplemente contiene la animación Poses en un punto de tiempo definido en la animación ( Class.Keyframe.Time</
Muestras de código
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)
Resumen
Propiedades
Métodos
Añade un KeyframeMarker a la Keyframe por herencia.
Añade un Pose a la Keyframe por herencia al marcar la fotograma clavede selección.
Devuelve un arreglo que contiene todos los KeyframeMarkers que se han añadido al Keyframe .
Devuelve un arreglo que contiene todos los Poses que se han agregado a un Keyframe .
Elimina un KeyframeMarker del Keyframe por sus configuraciones de que su Instance.Parent a nulo.
Elimina un Pose de la Keyframe al establecer su Instance.Parent a cero.
Propiedades
Time
Esta propiedad da la posición del tiempo (en segundos) en una animaciones. Esto determina el tiempo en que el Keyframe dentro de la caja de clics se mostrará.
Nota que el Keyframe con el valor de tiempo más alto en una KeyframeSequence es usado para determinar la duración de la animaciones.
Muestras de código
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
Esta función agrega un KeyframeMarker a la Keyframe por medio de la cual se la asigna a la clave. Es funcionalmente idéntico a la configuración del marcador Instance.Parent a la Keyframe.
Nota, esta función no se equivocará cuando se le dé a una instancia que no sea a un marcador de clave como parámetro y se la atribuirá con éxito.
Más sobre Keyframes
Keyframe nombres no necesitan ser únicos. Por ejemplo, si una animación tiene tres marcos de clave nombrados "Partículas", el evento conectado devuelto por AnimationTrack:GetMarkerReachedSignal() disparará cada vez que uno de estos marcos de clave se alcanza.
Keyframe nombres se pueden establecer en el Editor de Animación de Roblox al crear o editar una animaciones. Sin embargo, no se pueden establecer por un Script en una animación existente antes de jugarla.
Véase también:
Parámetros
El KeyframeMarker estando asociado al Keyframe .
Devuelve
Muestras de código
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
Esta función agrega un Pose a Class.Keyframe por medio de la herencia, que se agrega a la herencia del marco de claves. Es funcionalmente idéntico a establecer el Keyframe del posición a la herencia del marco de claves.
Nota, esta función no se equivocará cuando se le dé una instancia que no sea un Pose como parámetro de posición y lo padresca con éxito.
Parámetros
Devuelve
Muestras de código
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
Esta función devuelve un arreglo que contiene todos los KeyframeMarkers que se han agregado al Keyframe . Nota, esta función solo devolverá instances de tipo KeyframeMarker.
Más sobre Keyframes
Keyframe nombres no necesitan ser únicos. Por ejemplo, si una animación tiene tres marcos de clave nombrados "Partículas", el evento conectado devuelto por AnimationTrack:GetMarkerReachedSignal() disparará cada vez que uno de estos marcos de clave se alcanza.
Keyframe nombres se pueden establecer en el Editor de Animación de Roblox al crear o editar una animaciones. Sin embargo, no se pueden establecer por un Script en una animación existente antes de jugarla.
Véase también:
Devuelve
Un matriz que contiene todos KeyframeMarkers que se han agregado a la Keyframe .
Muestras de código
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
Esta función devuelve un arreglo que contiene todos Poses que se han agregado a un Keyframe .
Devuelve
Un arreglo de Poses .
Muestras de código
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
Esta función elimina un KeyframeMarker del Keyframe por sus configuraciones de su Instance.Parent a nulo.
El marcador de Keyframe Instance.Parent está configurado para nulo, pero no está destruido. Esto significa que, si el marcador se refiere a él, se puede re-padrear más tarde.
Nota: esta función no se equivocará cuando se le dé a una instancia que no sea a un marcador de Keyframe como parámetro.
Más sobre Keyframes
Keyframe nombres no necesitan ser únicos. Por ejemplo, si una animación tiene tres marcos de clave nombrados "Partículas", el evento conectado devuelto por AnimationTrack:GetMarkerReachedSignal() disparará cada vez que uno de estos marcos de clave se alcanza.
Keyframe nombres se pueden establecer en el Editor de Animación de Roblox al crear o editar una animaciones. Sin embargo, no se pueden establecer por un Script en una animación existente antes de jugarla.
Véase también:
Parámetros
Devuelve
Muestras de código
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
Esta función elimina un Pose de el Keyframe al establecer su Instance.Parent en 2>nil2> sin destruirlo. Esto significa que la postura proporcionada se refiere y se puede re-padrear más tarde.
Nota, esta función no se equivocará cuando se le dé a una instancia que no sea un Pose como parámetro de posición.
Parámetros
Devuelve
Muestras de código
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