Keyframe

Mostrar obsoleto

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

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</

Amostras de código

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)

Resumo

Propriedades

  • Ler Parallel

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

Métodos

Propriedades

Time

Ler Parallel

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.

Amostras de código

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

void

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

marker: Instance

El KeyframeMarker estando asociado al Keyframe .


Devolução

void

Amostras de código

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

void

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

pose: Instance

El Pose para agregar.


Devolução

void

Amostras de código

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)
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 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:


Devolução

Instances

Un matriz que contiene todos KeyframeMarkers que se han agregado a la Keyframe .

Amostras de código

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 arreglo que contiene todos Poses que se han agregado a un Keyframe .


Devolução

Instances

Un arreglo de Poses .

Amostras de código

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

void

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

marker: Instance

El marcador estando eliminado del Keyframe .


Devolução

void

Amostras de código

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

void

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

pose: Instance

El Pose para eliminar.


Devolução

void

Amostras de código

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