Keyframe

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Un Keyframe contient le Poses appliqué aux joints dans un Model à un moment donné dans une animations. Keyframes sont interpolés pendant la lecture de l'animation.

Remarque, dans la plupart des cas, les développeurs n'ont pas besoin de manipuler KeyframeSequences car l'éditeur d'animation couvre la plupart des fonctionnalités d'animation. Cependant, dans certains cas, un développeur peut souhaiter générer une animation à partir d'un Script ou construire leur propre plugin.

Structure

Les keyimes sont placés dans un KeyframeSequence et contiennent Pose objets. Les poses sont nommées en fonction de la hiérarchie jointe. Ce signifie que chaque BaseParts est parenté à la hiérarchie 2>Class.Pose2> correspondant à la partie qu

Remarquez que, comme Poses sont nommés selon le BaseParts qu'ils correspondent à, les animations nécessitent des noms de parties distincts pour s'exécuter correctement.

Interprétation

Pendant la lecture d'animation, les poses dans différents cadres clés sont interpolées entre elles. Cela permet une animation fluide de créer sans avoir à définir chaque cadre. Notez que le style d'interpolation est déterminé dans l'objet Pose . L'objet Keyframe ne contient que le Poses à un moment donné dans l'animation ( Keyframe.Time ).

Échantillons de code

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)

Résumé

Propriétés

  • Lecture parallèle

    La position dans l'espace du temps (en secondes) de la Keyframe dans une animations. Cela détermine le moment où le Poses à l'intérieur du cadre sera affiché.

Méthodes

Propriétés

Time

Lecture parallèle

Cette propriété donne la position dans le temps Keyframe dans une animations. Cela détermine le temps à cui le Poses à l'intérieur du cadre de classe sera affiché.

Notez que le Keyframe avec la plus haute valeur du temps dans une KeyframeSequence est utilisé pour déterminer la durée de l'animations.

Échantillons de code

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éthodes

AddMarker

void

Cette fonction ajoute un KeyframeMarker à la Keyframe par le biais de sa parenté avec la image-clé. Elle est fonctionnellement identique à la définition du marqueur Instance.Parent sur la clé.

Remarquez que cette fonction ne se produira pas d'erreur lorsqu'une instance autre qu'un marqueur de clé sera donnée en tant que paramètre et le parentera avec succès.

Plus sur les clés

Keyframe les noms ne doivent pas être uniques. Par exemple, si une animation a trois cadres clés nommés «Particles», l'événement connecté renvoyé par AnimationTrack:GetMarkerReachedSignal() lancera chaque fois qu'un de ces cadres clés est atteint.

Keyframe les noms peuvent être définis dans l'éditeur d'animation Roblox lors de la création ou de l'édition d'une animations. Ils ne peuvent cependant pas être définis par un Script sur une ancienne animation avant de la jouer.

Voir aussi :

Paramètres

marker: Instance

Le KeyframeMarker étant associé au Keyframe .


Retours

void

Échantillons de code

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

Cette fonction ajoute un Pose à la Keyframe en le faisant apparaître dans la fenêtre de classement. Elle est fonctionnellement identique à la définition du Instance.Parent de la position.

Remarquez que cette fonction ne se produira pas d'erreur lorsqu'une instance autre qu'une Pose sera donnée comme paramètre de pose et le parentera avec succès.

Paramètres

pose: Instance

Le Pose à ajouter.


Retours

void

Échantillons de code

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

Cette fonction renvoie un tableau contenant tous les KeyframeMarkers qui ont été ajoutés au Keyframe . Notez que cette fonction ne renverra que instances de type KeyframeMarker.

Plus sur les clés

Keyframe les noms ne doivent pas être uniques. Par exemple, si une animation a trois cadres clés nommés «Particles», l'événement connecté renvoyé par AnimationTrack:GetMarkerReachedSignal() lancera chaque fois qu'un de ces cadres clés est atteint.

Keyframe les noms peuvent être définis dans l'éditeur d'animation Roblox lors de la création ou de l'édition d'une animations. Ils ne peuvent cependant pas être définis par un Script sur une ancienne animation avant de la jouer.

Voir aussi :


Retours

Instances

Un tableau contenant tous les KeyframeMarkers qui ont été ajoutés au Keyframe .

Échantillons de code

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

Cette fonction renvoie un tableau contenant tous les Poses qui ont été ajoutés à un Keyframe .


Retours

Instances

Un tableau de Poses .

Échantillons de code

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

Cette fonction supprime un KeyframeMarker du Keyframe par le biais de ses paramètres Instance.Parent à zéro.

Le marqueur Keyframe est référencé à zéro, mais il n'est pas détruit. Cela signifie que, si le marqueur est référencé, il peut être ré-parenté plus tard.

Remarquez que cette fonction ne se produira pas d'erreur lorsqu'une instance autre qu'un marqueur de clé est donnée comme argument.

Plus sur les clés

Keyframe les noms ne doivent pas être uniques. Par exemple, si une animation a trois cadres clés nommés «Particles», l'événement connecté renvoyé par AnimationTrack:GetMarkerReachedSignal() lancera chaque fois qu'un de ces cadres clés est atteint.

Keyframe les noms peuvent être définis dans l'éditeur d'animation Roblox lors de la création ou de l'édition d'une animations. Ils ne peuvent cependant pas être définis par un Script sur une ancienne animation avant de la jouer.

Voir aussi :

Paramètres

marker: Instance

Le marqueur étant retiré du Keyframe .


Retours

void

Échantillons de code

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

Cette fonction supprime un Pose à partir du Keyframe par définition de son Instance.Parent à 2>nil2> sans le détruire. Cela signifie que la position fournie est référencée et qu'elle peut être re-parentée plus tard.

Remarquez que cette fonction ne se produira pas d'erreur lorsqu'une instance autre qu'une Pose est donnée comme paramètre de pose.

Paramètres

pose: Instance

Le Pose à supprimer.


Retours

void

Échantillons de code

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

Évènements