此對象存儲所有 Keyframes 以便為動畫執行程序,確認動畫是否為重複程序,並確定優先權在其他動畫之前。
什麼是 KeyframeSequencer?
Roblox 在播放動畫時使用的動畫資料,參考 Animation.AnimationId 屬性,從鑰匙動畫編輯器逼順序中。 每個動畫都參考 Class.Animation.
注意,在大多數情況下,您不需要操作 KeyframeSequences,因為動畫編輯器涵蓋大多數動畫功能。但在一些情況下,您可能需要從 Script 生成動畫或從自己的外掛程式生成動畫。 但只有 Roblox Studio 才能使用這樣的 KeyframeSequences。如果您想要
鑰匙框順序屬性
KeyframeSequence.Priority 和 KeyframeSequence.Loop 儲存順序的優先權和重複動畫設定。注意,AnimationTrack 屬性可能會在播放時寫入此屬性。
最後一個 Keyframe 在順序中,意味著 Keyframe 與最高 Keyframe.Time 屬性,決定動畫的長度。
鑰匙框結構
鑰匙順序作為一個容器,可以容納 Keyframes。 Keyframe 代表動畫中的「鑰鍵」框,在播放時會在間隔中。
鑰匙框包含 Poses 。 Class
位置跟隨共同的階層結構。 Pose 的父親與零件它附加到的零件的 Pose 對應。 在實際上,這意味著位置從根部分分支。 請參閱下面的視覺示例。
使用 Keyframe Sequences 製作動畫
您必須先將 Roblox 上傳 KeyframeSequences 才能在體驗中播放。在 Studio 中,右鍵單擊 KeyframeSequences 並按一下「儲存到 Roblox」。或者,您可以使用 Plugin:SaveSelectedToRoblox() 函數。 兩者都會帶出動畫上傳窗口,允許您上傳您的 KeyframeSequences 作為一個動畫。
在某些情況下,您可能想要預覽動畫,然後上傳到 Roblox 網站。您可以使用 KeyframeSequenceProvider:RegisterKeyframeSequence() 來生成暫時 id,用於本地化動畫測試。
取得鑰匙順序列
在某些情況下您可能想要下載相關的預製動畫。您可以使用 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 ,作為它的上級,以便將它們兩個結合在一起。
返回包含所有 Keyframes 在 KeyframeSequence 中的資料列。
此功能將 Keyframe 從 KeyframeSequence 中移除,設定其父親為零。
屬性
方法
AddKeyframe
此功能在 Keyframe 與 KeyframeSequence 的父關鍵格添加一個 KeyframeSequence 。它與設置 2>Class.Keyframe2> 的 5>Class.Instance.Parent5> 相功能相同。
注意,此功能在 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 中移除,設定其父親為零。它與設置關鍵格的父親為零相同。
這將關鍵格的父親設為 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)