Keyframe

Mostrar obsoleto

*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 marco clave contiene el Poses aplicado a las articulaciones en un Model en un punto de tiempo dado en una animaciones.Keyframes se interpolan entre durante la reproducción de animación.

Tenga en cuenta que, en la mayoría de los casos, los desarrolladores no necesitan manipular KeyframeSequences ya que el editor de animaciones 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

Los marcos de clave se mantienen dentro de un KeyframeSequence y contienen objetos Pose .Las poses se nombran de acuerdo con la BaseParts a la que se corresponden y están estructuradas en términos de jerarquía compartida.Esto significa que cada Pose es padre del correspondiente Pose a la parte a la que está adjunto.

Tenga en cuenta, como Poses se llaman de acuerdo con el BaseParts que se corresponden, las animaciones requieren nombres de partes distintos para jugar correctamente.

Interpolación

Durante la reproducción de la animación, las poses en diferentes marcos de clave se interpolan entre sí.Esto permite que se cree una animación suave sin necesidad de definir cada marco.Nota, el estilo de interpolación se determina en el objeto Pose.El objeto Keyframe simplemente contiene el Poses en un punto de tiempo definido en la animación (Keyframe.Time).

Muestras de código

This sample includes a function that will generate a 'blank' keyframe containing blank poses for all of the model's connected parts in the correct hierarchical order.

Keyframe Generate Poses

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

  • Leer paralelo

    La posición del tiempo Keyframe en una animaciones(en segundos). Esto determina el tiempo en el que se mostrará el Poses dentro del marco de claves.

Métodos

Propiedades

Time

Leer paralelo

Esta propiedad da la posición del tiempo Keyframe en una animaciones(en segundos).Esto determina el momento en el que se mostrará el Poses dentro del marco de clave.

Observe el Keyframe con el valor de tiempo más alto en una KeyframeSequence se usa para determinar la duración de la 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.

Get KeyframeSequence Length

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 patria de ella al marco de clave.Es funcionalmente idéntico a establecer el marcador Instance.Parent en el marco de clave.

Tenga en cuenta que esta función no fallará cuando se dé una instancia diferente a una KeyframeMarker como parámetro y se la asigne con éxito.

Más sobre marcos clave

Keyframe los nombres no necesitan ser únicos.Por ejemplo, si una animación tiene tres marcos clave llamados "Partículas", el evento conectado devuelto por AnimationTrack:GetMarkerReachedSignal() se disparará cada vez que se alcance uno de estos marcos clave.

Keyframe los 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.

Vea también:

Parámetros

marker: Instance

El KeyframeMarker siendo padre del Keyframe .

Valor predeterminado: ""

Devuelve

()

Muestras de código

This example demonstrates the Keyframe:AddMarker() and Keyframe:RemoveMarker() functions. Note these are functionally equivalent to parenting and un-parenting the markers.

Add Marker/Remove Marker

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 la Keyframe por medio de la patria de ella al marco fotograma clave.Es funcionalmente idéntico a establecer el Instance.Parent de la postura en el fotograma clave.

Nota, esta función no fallará cuando se dé una instancia diferente a una Pose como parámetro de posición y se la asigne con éxito.

Parámetros

pose: Instance

El Pose que se debe agregar.

Valor predeterminado: ""

Devuelve

()

Muestras de código

This sample includes a function that will generate a 'blank' keyframe containing blank poses for all of the model's connected parts in the correct hierarchical order.

Keyframe Generate Poses

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)

This sample demonstrates quickly the Keyframe.AddPose, Keyframe.RemovePose and Pose.AddSubPose and Pose.RemoveSubPose functions. Note these are functionally equivalent to parenting and un-parenting the poses.

Keyframe Add/Remove Pose

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

Instances

Esta función devuelve un array que contiene todos los KeyframeMarkers que se han agregado al Keyframe.Nota, esta función solo devolverá instances de tipo KeyframeMarker.

Más sobre marcos clave

Keyframe los nombres no necesitan ser únicos.Por ejemplo, si una animación tiene tres marcos clave llamados "Partículas", el evento conectado devuelto por AnimationTrack:GetMarkerReachedSignal() se disparará cada vez que se alcance uno de estos marcos clave.

Keyframe los 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.

Vea también:


Devuelve

Instances

Un array que contiene todos los KeyframeMarkers que se han agregado al Keyframe.

Muestras de código

This example demonstrates the Keyframe:AddMarker() and Keyframe:GetMarkers() functions. After adding two markers, marker1 and marker2 to the keyframe, this example gets and prints the names of the added markers.

Get Keyframe Markers Attached to a 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)
end

GetPoses

Instances

Esta función devuelve un array que contiene todos los Poses que se han agregado a un Keyframe .


Devuelve

Instances

Un array de Poses .

Muestras de código

This code sample includes a function to reset the CFrame of the Poses in a Keyframe.

Keyframe Reset Poses

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 de la Keyframe por la configuración de su Instance.Parent a nil .

El marcador de cuadro clave está configurado en pero no se destruye.Esto significa, siempre que el marcador se haya referenciado, se puede reasignar más tarde.

Tenga en cuenta que esta función no fallará cuando se dé una instancia diferente a una KeyframeMarker como parámetro.

Más sobre marcos clave

Keyframe los nombres no necesitan ser únicos.Por ejemplo, si una animación tiene tres marcos clave llamados "Partículas", el evento conectado devuelto por AnimationTrack:GetMarkerReachedSignal() se disparará cada vez que se alcance uno de estos marcos clave.

Keyframe los 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.

Vea también:

Parámetros

marker: Instance

El marcador que se está eliminando de la Keyframe .

Valor predeterminado: ""

Devuelve

()

Muestras de código

This example demonstrates the Keyframe:AddMarker() and Keyframe:RemoveMarker() functions. Note these are functionally equivalent to parenting and un-parenting the markers.

Add Marker/Remove Marker

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 la Keyframe al establecer su Instance.Parent a nil sin destruirlo.Esto significa que la postura proporcionada se referencia y se puede reasignar más tarde.

Tenga en cuenta que esta función no fallará cuando se dé una instancia diferente a una Pose como parámetro de posición.

Parámetros

pose: Instance

El Pose que se debe eliminar.

Valor predeterminado: ""

Devuelve

()

Muestras de código

This sample demonstrates quickly the Keyframe.AddPose, Keyframe.RemovePose and Pose.AddSubPose and Pose.RemoveSubPose functions. Note these are functionally equivalent to parenting and un-parenting the poses.

Keyframe Add/Remove Pose

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

Eventos