KeyframeSequence

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

這個對象存儲所有的 Keyframes 對於動畫,確定動畫是否循環,並確定其對其他動畫的優先級。

鑰匙框順序是什麼?

Roblox 構建在動畫播放中使用的動畫資料,由鑰匙框順序的 Animation.AnimationId 屬性引用。每個動畫都會內部指向鑰匙框順序或曲線動畫。雖然通常由 Roblox 動畫編輯器創建,但 KeyframeSequence 也可以由其他插件或甚至手動創建。一旦上傳到 Roblox,Roblox 會為 屬性分配一個內容 ID,用於參考上傳的鑰匙框順序。

注意,在大多數情況下,您不需要操作鑰匙框順序,因為動畫編輯器覆蓋了大多數動畫功能。然而,在某些情況下,您可能希望從 Script 生成動畫或構建自己的外掛程式。但是,只有 Roblox Studio 可以使用在這種方式創建的鑰匙框順序。如果您想使用此類鑰匙框順序,您將需要上傳到 Roblox 如下所述。

關鍵框順序屬性

KeyframeSequence.PriorityKeyframeSequence.Loop 保存順序的優先級和循環動畫設定。請注意,AnimationTrack屬性最終可能會在播放時覆蓋這些屬性。

在順序中最後的 Keyframe ,意味著具有最高 Keyframe 屬性的 Keyframe.Time 決定動畫長度。

關鍵框順序結構

鑰匙框順序作為容器,可以容納 Keyframes 。鑰匙框在動畫中代表一個「鑰鍵」框架,在播放期間會被間斷。

鑰匙框包含 PosesPoses ,適用於每個BasePart 被動畫,包含應用於CFrame 連接兩部分的Motor6D 。姿勢與名稱相對應的 BasePart 匹配,並將其數據應用到與此相同名稱的 Motor6D 部分,以確認為 Motor6D.P1 。因此,動畫需要不同的部分名稱才能正確播放。

姿勢會遵循基於聯合層級的結構。每個 Pose 的父對應到它附帶的零件的 Pose 。在實踐中,這意味著姿勢分支從根部分離。請參見下方的視覺示例。

製作動畫時使用鑰匙框順序

您必須先將鑰匙框順序上傳到 Roblox,才能在體驗中播放。在工作室中,右鍵單擊鑰匙框順序並單擊「儲存到 Roblox」。或者,您可以使用 Plugin:SaveSelectedToRoblox() 功能。兩種方法都會帶起動畫上傳窗口,讓你能夠將關鍵帧順序上傳為動畫。

在某些情況下,您可能想在上傳到 Roblox 網站之前預覽動畫。您可以使用 KeyframeSequenceProvider:RegisterKeyframeSequence() 生成暫時 ID。這將生成一個哈希 ID,可用於本地化動畫測試。

取得關鍵框架順序

在某些情況下,您可能希望下載對應已上傳的動畫的關鍵框順序。您可以使用 AnimationClipProvider:GetAnimationClipAsync() 下載動畫。

範例程式碼

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)

This code sample contains a simple function to generate an Animation with a generated hash ID to preview a KeyframeSequence locally.

Create temporary animation

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)

This sample demonstrates how a basic KeyframeSequence can be created.

KeyframeSequence Instantiation

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

概要

屬性

屬性 繼承自 AnimationClip

方法

屬性

AuthoredHipHeight

隱藏
外掛程式安全性
平行讀取

包含使用來寫入此 KeyframeSequence 模型的 Humanoid 的臀高。預設值為 1.35,因為這是標準 R15 Character|character 的臀部高度設置。

方法

AddKeyframe

()

這個功能會將 Keyframe 添加到 KeyframeSequenceKeyframeSequence 上,將它當作父親來抱抱它。它的功能與設置關鍵格的 Instance.ParentKeyframeSequence 相同。

注意,當使用 keyframe 參數為 Keyframe 以外的實例時,此功能將不會發生錯誤,並成功將其作為父級。

參數

keyframe: Instance

要添加的 Keyframe

預設值:""

返回

()

範例程式碼

This sample demonstrates how a basic KeyframeSequence can be created.

KeyframeSequence Instantiation

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

Instances

取得關鍵框架 返回包含所有 Keyframes 已添加到 KeyframeSequence 的一個 array。


返回

Instances

一個 Keyframe 陣列。

範例程式碼

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)

RemoveKeyframe

()

此功能會將 KeyframeKeyframeSequence 移除,設置其父為 nil 。它的功能與設置關鍵格的父為 nil 相同。

這將關鍵格的父設為 nil ,但不會破壞它。這意味著,只要還有另一個參考鍵框,它之後就可以被重新父輩了。

注意,當使用 Instance 除了 Keyframe 作為鑰匙框參數時,此功能不會發生錯誤。

參數

keyframe: Instance

要移除的 Keyframe

預設值:""

返回

()

範例程式碼

This sample adds a Keyframe to a KeyframeSequence before removing it and adding it again. Note that once a Keyframe is removed it is not destroyed, meaning it can be re-added later.

KeyframeSequence RemoveKeyframe

local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)

活動