此对象存储所有 Keyframes 为了动画,确定动画是否循环,并且对其他动画进行优先级。
什么是 KeyframeSequencer?
Roblox 在播放动画时使用它在键盘框列中参考的 Animation.AnimationId 属性。 每个动画都会引用 Animations 或内部的 CurveAnimation 。 虽然通常由 Roblo
注意,在大多数情况下,您不需要操作 KeyframeSequences,因为动画编辑器覆盖了大多数动画功能。 但在某些情况下,您可能需要从 Script 生成一个动画或构建您自己的插件。 但只有 Roblox Studio 才能使用这样的 KeyframeSequences。 如果您想使用此 KeyframeSequences,您需要将其上传到 Roblox
键框顺序属性
KeyframeSequence.Priority 和 KeyframeSequence.Loop 保存顺序的优先级和循环动画设置。请注意,AnimationTrack 属性可以在播放时覆盖这些属性。
上一 Keyframe 在顺序中,意味着 Keyframe 拥有最高 Keyframe.Time 属性,确定动画的长度。
键框顺序结构
键框顺序作为一个容器,可以容纳 Keyframes 。键框在动画中代表一个“钥匙”框,在播放时间之间是相互独立的。
键框包含 Poses 。 Class.Pose|Poses</
体位跟随结构基于共同层级。 父 的 每个 Pose 跟随父 的 每个 Pose 的零件。 在实践中,这意味着体位分支从根部。 请参阅下面的视觉示例。
使用 Keyframe Sequences 制作动画时使用
您必须先将 KeyframeSequences 上传到 Roblox 才能在体验中播放。在 Studio 中,右击 KeyframeSequences 并单击“保存到 Roblox”。或者,您可以使用 Plugin:SaveSelectedToRoblox() 函数。 您可以使用 Studio 中的“动画上传”功能来上传您的 KeyframeSequences 作为动画。
在某些情况下,您可能需要预览 Animation 再将其上传到 Roblox 网站。您可以使用 KeyframeSequenceProvider:RegisterKeyframeSequence() 生成一个临时 id 来使用本地化动画测试。
获得键框顺序
在某些情况下,您可能需要下载与现有上传的动画相对应的 KeyframeSequencer。您可以使用 AnimationClipProvider:GetAnimationClipAsync() 来下载一个动画。
代码示例
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)
local KeyframeSequenceProvider = game:GetService("KeyframeSequenceProvider")
local function createPreviewAnimation(keyframeSequence)
local hashId = KeyframeSequenceProvider:RegisterKeyframeSequence(keyframeSequence)
local Animation = Instance.new("Animation")
Animation.AnimationId = hashId
return Animation
end
local keyframeSequence = Instance.new("KeyframeSequence")
local animation = createPreviewAnimation(keyframeSequence)
print(animation)
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
概要
属性
包含Humanoid模型的KeyframeSequence的使用者。
确定动画存储在此 AnimationClip 是否要循环。
决定哪个剪辑在多个动画同时播放时拥有优先权。
方法
将 Keyframe 添加到 KeyframeSequence 通过将它作为父级添加到 KeyframeSequence 。
返回一个包含所有 Keyframes 在一个 KeyframeSequence 中的数阵。
此函数将一个 Keyframe 从 KeyframeSequence 中移除,设置其父为零。
属性
方法
AddKeyframe
此函数将 Keyframe 添加到 KeyframeSequence 通过将其作为父级设置到 KeyframeSequence 。它与设置关键帧的 2>Class.Instance.Parent2> 相同功能。
注意,此函数在调用一个实例以外的 Keyframe 作为钥匙框参数时不会发生错误,它将成功地父级。
参数
将添加。 Class.Keyframe 将添加。
返回
代码示例
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
GetKeyframes
获取键形框架 返回一个包含所有 Keyframes 添加到 KeyframeSequence 的阵列。
返回
Class.Keyframe|Keyframe 的阵列。
代码示例
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)
RemoveKeyframe
此函数将一个 Keyframe 从 KeyframeSequence 设置为零,以此移除它的父级。它与设置 k关键帧yframe 的父级为零相同。
这将关键帧的父级设置为 nil,但不会将其销毁。这意味着,如果另一个引用于键框的父级,它可以在后续父级中重新父级。
注意,此函数在使用 Instance 其他于 Keyframe 作为钥匙框参数时不会发生错误。
参数
返回
代码示例
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)