KeyframeSequence
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
このオブジェクトは、アニメーションのすべての Keyframes を保存し、アニメーションがループされているかどうかを判断し、他のアニメーションとの優先順位を決定します。
キーフレームシーケンスとは何ですか?
Roblox は、アニメーションの再生で使用するアニメーションデータを構築し、キーフレームシーケンスから参照される Animation.AnimationId プロパティから引用します。すべてのアニメーションは、内部でキーフレームシーケンスまたはカーブアニメーションに参照します。しかし、通常 Roblox アニメーションエディタによって作成されますが、キーフレームシーケンスは他のプラグインまたは手動でも作成できます。Roblox にアップロードされると、Roblox は プロパティに使用するコンテンツIDを割り当て、アップロードされたキーフレームシーケンスに参照します。
ほとんどの場合、アニメーションエディタがほとんどのアニメーション機能をカバーしているため、キーフレームシーケンスを操作する必要はありません。しかし、いくつかの場合、Script からアニメーションを生成したり、独自のプラグインをビルドしたい場合があります。しかし、Roblox Studio だけが、そのように作成されたキーフレームシーケンスを使用できます。このようなキーフレームシーケンスを使用したい場合は、以下に説明されているように Roblox にアップロードする必要があります。
キーフレームシーケンスプロパティ
KeyframeSequence.Priority および KeyframeSequence.Loop は、シーケンスの優先度とループアニメーション設定を保存します。注: AnimationTrack プロパティは最終的に再生時にこれらのプロパティを上書きできます。
シーケンスの最後の Keyframe は、最も高い Keyframe プロパティを持つ Keyframe.Time を決定し、アニメーションの長さを決定します。
キーフレームシーケンス構造
キーフレームシーケンスは、Keyframes を保持するコンテナとして機能します。キーフレームは、再生中に間抜けになるアニメーションの「キー」フレームを表現します。
キーフレームには Poses が含まれています。 、それぞれの がアニメーション化されている特定のものには、2つのパーツを接続するために適用された が含まれています。ポーズは、名前に一致する に対応し、データをこの同じ名前のパーツで識別される に適用します。このため、アニメーションは正しく再生するには、異なるパーツ名が必要です。
ポーズは、共同の階層に基づく構造に従います。それぞれの Pose の親は、付属しているパーツの Pose に対応します。実際には、これはポーズが根部から分岐することを意味します。ビジュアル例は以下を参照してください。
アニメーションを作成する際にキーフレームシーケンスを使用する
エクスペリエンスで再生できる前に、KeyframeSequences を Roblox に最初にアップロードする必要があります。Studio では、キーフレームシーケンスを右クリックし、「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.
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.
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.
-- 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 から nil を削除します。
プロパティ
AuthoredHipHeight
これを作成したモデルの Humanoid のヒップ高さを含みます。これを使用してこの KeyframeSequence を作成しました。デフォルト値は 1.35 です、これは標準の R15 Character|character のヒップ高さセットです。
方法
AddKeyframe
この機能は、Keyframe を親にして KeyframeSequence に追加し、KeyframeSequence に親を付けます。キーフレームの Instance.Parent を KeyframeSequence に設定すると機能的に同じです。
注: この関数は、キーフレームパラメータとして Keyframe 以外のインスタンスを呼び出してもエラーが発生しないため、それをうまく親にすることができます。
パラメータ
戻り値
コードサンプル
This sample demonstrates how a basic KeyframeSequence can be created.
-- 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
GetKeyframes は、Keyframes が追加されたすべての KeyframeSequence を含む配列を返します。
戻り値
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.
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 を削除します。キーフレームの親を nil に設定すると機能的に同じです。
これにより、キーフレームの親が nil に設定されますが、破壊されません。つまり、キーフレームに別の参照が残っている限り、後で再親にすることができます。
注: この機能は、キーフレームパラメータとして 以外を呼び出した場合、エラーが発生しません。
パラメータ
戻り値
コードサンプル
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.
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)