アニメーショングラフエディター

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

アニメーショングラフエディターは、テクニカルアーティストやアニメーターがRoblox Studio内で直接複雑なアニメーションロジックを構築できる視覚的なノードベースのツールです。ブレンドツリーのような動作を作成するための効率的なインターフェースを提供することで、キャラクターの動きに対する手動スクリプトへの従来の依存を排除します。

このシステムは、既存のアニメーションワークフローと連携して機能します:

  • アニメーションエディター: 個々のクリップを作成し、キーフレームやカーブを微調整するための主要なツールとしてアニメーションエディターを引き続き使用します。
  • アニメーショングラフエディター: このツールを使用して、これらのクリップを整理し、洗練されたゲームプレイ動作を駆動するロジックツリーを構築します。

コラボレーションを強化するように設計された視覚的なグラフは、開発者がアニメーターによって作成されたロジックを迅速に検査、デバッグ、理解できるようにします。アーティストがインタラクティブな動きを洗練することに集中している間、開発者はブレンドされたアニメーションや状態を直接制御するためにアニメーショングラフノードにプログラム的にアクセスすることができます。

グラフを構築する


アニメーション可能なキャラクターのロジックを構築するには、Studioリボンのアバタータブからアニメーショングラフエディターにアクセスします。以下の手順は、リグを初期化し、デフォルトの歩行および手を振るアニメーションを使用して基本的なノードネットワークを構築する方法を示しています。

実用的なアプリケーションについての詳細は、アニメーショングラフリファレンスファイルを参照してください。このファイルには、基本的な実装例と複雑な実装例が含まれています。

独自のアニメーショングラフを作成するには、リファレンスに提供されている基本的な例に似た手順を使用します:

  1. Studioで、アバタータブに移動し、キャラクターマイアバターを選択して、アニメーション可能なリグを追加します。

    Studioのツールバーでハイライトされたキャラクターボタン。
  2. アバタータブのグラフエディターに移動してアニメーショングラフエディターを開きます。

    Studioのツールバーで示されたアニメーショングラフエディター。
  3. 3Dビューポートでアニメーション可能なリグを選択し、グラフを作成を選択します。

  4. グラフエディターで右クリックし、クリップを選択します。

    右クリックメニューのノードリスト
  5. 新しいクリップノードで、アニメーションIDを設定します。

    1. アニメーションIDドロップダウンを選択します。

    2. 特定のアニメーションアセットIDを提出するには、インポートをクリックします。

      アニメーションIDを追加するためのアニメーションインポートモジュールのフィールドを示す
    3. アニメーションIDフィールドにデフォルトの歩行アニメーションを追加します: 507777826

    4. インポートを選択します。

  6. デフォルトの手を振るアニメーション: 507770239を使用して、手順4-5を繰り返して別のクリップノードを追加します。

    アニメーションIDが入力された2つのクリップノード
  7. グラフエディターで右クリックし、追加を選択します。

    ノードを追加
  8. クリップノードを追加ノードに接続します。右上の出力コネクタを適切なポートにドラッグします:

    1. 歩行アニメーションのクリップノードをベースポートに接続します。
    2. 手を振るアニメーションのクリップノードを加算ポートに接続します。
    加算ノードに接続された両方のクリップノード
  9. 加算ノードから、右上の出力コネクタをグラフ出力ポーズポートに接続します。

    最終出力ノードに接続されたすべてのノード
  10. オプション
    Speed変数にパラメータを割り当てます。

    1. 緑のスピードポートを空の領域にクリックしてドラッグします。新しいパラメータノードが表示されます。

      クリップノードのスピードポートからコネクタをクリックしてドラッグする。
    2. グラフエディターの左上で、パラメータペインを使用してノード内のパラメータを迅速に変更できます。また、プログラム的にアクセスすることもできます。

      パラメータペイン、パラメータノード、および共有値を示すクリップノード。
  11. 再生ボタンを押してアニメーションをテストします。

    アニメーションをプレビューするための再生ボタンアイコン
  12. 様々な重み、速度、再生モード、その他のアニメーションをテストしてみてください。個々のノードに関する詳細は、ノードリファレンスを参照してください。

API統合

アニメーショングラフの作成と展開は、標準のRobloxアニメーションパイプラインに従います。アニメーショングラフエディターでリグを選択すると、新しいAnimationGraphDefinitionアセットが作成されます。このアセットは、ノード、接続、およびパラメータのコンテナとして機能します。ロジックが確定したら、グラフを公開して標準のアセットIDを受け取ります。

スクリプト内では、従来のアニメーションのようにAnimatorにこれらのグラフをロードすることで相互作用します。グラフの内部ロジックを駆動するには、AnimationTrack:SetParameter()を使用して、移動速度や状態のブール値などのリアルタイム値をグラフの変数に直接渡します。

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- あなたの公開グラフID
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- RunServiceを介した動的パラメータ更新
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)

ノードリファレンス

すべてのアニメーショングラフノードは、アニメーションデータがキャラクターリグに到達する前に処理するロジックゲートまたはデータソースとして機能します。このセクションでは、アニメーショングラフエディター内の機能ブロックの技術的な内訳を提供します。すべてのノードは現在、アニメーションポーズを出力します。

各ノードセクションには以下が含まれます:

  • 定義 – ノードの目的とグラフ内での役割の概要。
  • 入力 – ノードに入るデータストリーム。複数の入力はInput1、Input2、...、InputNとして表されます。
  • 入力プロパティ – 特定の入力に直接関連付けられた設定(Blend1Dノードの位置0.5に割り当てられたIdle入力など)。
  • イベントデータ – 内部グラフロジックや外部Luauスクリプトをトリガーするためにノードによって発生または消費されるイベント。この動作はベータ開発の過程で変更される可能性があります。

グローバルイベントルール

すべてのノードおよび遷移に対して、以下のルールがデフォルトで適用されます:

  • イベントは、ソースノードからグラフを通じて上方に伝播します。各イベントは、最終的なブレンドにおけるソースの影響を表す重みを持ちます。重みがゼロに達した場合、その時点でイベントは無効化されます。
  • カスタムイベントロジックを持たないノードは、すべてのイベントを変更せずに通過させます。入力間でブレンドまたは選択するノードは、重みをスケールしたり、非主要入力からのイベントをブロックすることがあります(ノードごとのイベントセクションを参照)。
  • グラフの最上部に到達したマーカーイベントは、AnimationTrack:GetMarkerReachedSignal()を介して観察できます。

クリップ

クリップノード

AnimationClipアセットへの参照です。これはグラフ内のリーフノードとして機能し、他のノードにブレンド、選択、または変更するための生のアニメーションデータを生成します。

入力
  • なし
プロパティ
プロパティタイプ説明
AnimationId文字列再生するアニメーションアセット(例:rbxassetid://12345)。
PlayModeEnum.AnimationNodePlayMode

クリップがその期間の終わりに達したときの動作を定義します。

  • ループ(デフォルト): クリップが終了すると自動的に最初から再起動します。
  • ピングポン: 開始から終了まで再生し、その後すぐに終了から開始に逆再生します。
  • 一度再生して保持: 一度再生し、完了時に最終ポーズを保持します。
  • 一度再生してリセット: 一度再生し、完了時に初期の開始ポーズに戻ります。
Reverseブール値再生の方向を制御します。
Speed数値再生速度の倍率。0.0はグラフを一時停止し、1.0は通常の速度、2.0は倍速です。
Trimブール値クリップの期間を切り詰めるかどうかを切り替えます。
TrimStart数値再生を開始すべき絶対的なタイムスタンプ(秒単位)。
TrimEnd数値再生を終了すべき絶対的なタイムスタンプ(秒単位)。
イベントデータ
  • イベント処理: なし。これは子を持たないリーフノードです。
  • イベント発生: アニメーションクリップに埋め込まれたカスタムマーカー(例:「足音」、「武器スイング」)を読み取り、発生した正確なフレームで名前付きイベントとして発生させます。クリップが切り詰められた場合、定義された[TrimStart, TrimEnd]間隔(含む)内のマーカーのみが発生します。

セレクト

セレクトノード

選択プロパティを介して任意の数の入力の間で選択します。現在の選択が変更されるたびに、新しい遷移がトリガーされます。

入力
  • Input1...InputN
プロパティ
プロパティタイプ説明
Selection文字列選択される入力の一意のIDで、入力接続の名前と一致します(例:「Walk」)。
イベントデータ
  • イベント処理: 現在選択されている入力からのイベントは、重みを変更せずに通過します。
  • イベント発生: 現在選択されている入力からのすべてのイベントのみが通過します。遷移中、イベント発生はグローバルイベントルールに従います。

プライオリティセレクト

プライオリティセレクトノード

接続された入力のリストを上から下へ評価し、条件が真である最初のものを再生します。これにより、特定のロジックに基づいて階層的なアニメーション選択が可能になります。現在の選択が変更されるたびに、新しい遷移がトリガーされます。

入力
  • Input1...InputN
    • Trigger (ブール値): この入力をアクティブにするために真でなければならない論理条件。現在のバージョンでは、これはブールパラメータに接続されています。
    • TransitionOverrideInterruptible (Enum.AnimationNodeInterruptible): このアクティブなアニメーションが高優先度の入力によって中断される条件を定義します。ノードレベルのDefaultInterruptible設定を上書きします。
      • 常に(デフォルト): この入力は高優先度の条件によっていつでも中断可能です。
      • 完了: 現在のアニメーションは再生を完了する必要があります。
      • トリガー: InterruptibleTriggerが真に設定されているときのみ、この入力は中断可能です。
    • InterruptibleTrigger (ブール値): TransitionOverrideInterruptibleTriggerに設定されている場合のみ利用可能です。この特定の式が真であるときに入力が中断可能です。
プロパティ
プロパティタイプ説明
DefaultInterruptibleEnum.AnimationNodeInterruptibleすべての入力に適用される基本的な中断ルール。各入力は独自のTransitionOverrideInterruptible入力プロパティでこれを上書きできます。
イベントデータ
  • イベント処理: 現在選択されている入力からのイベントは、重みを変更せずに通過します。
  • イベント発生: 現在選択されている入力からのすべてのイベントのみが通過します。遷移中、イベント発生はグローバルイベントルールに従います。

シーケンス

シーケンスノード

定義された待機条件に基づいて接続された入力を特定の順序でアクティブにします。現在の選択が変更されるたびに、新しい遷移がトリガーされます。

入力
  • Input1...InputN
    • TransitionOverrideWaitFor (Enum.AnimationNodeWaitFor): シーケンスが次の入力に進む前に満たす必要がある条件を指定します。ノードレベルのDefaultWaitFor設定を上書きします。
      • 完了(デフォルト): 現在の入力がサイクルを完了すると次の入力に進みます。進行動作は接続された入力に依存します:
        • 一度再生するクリップ: クリップが終了すると進みます。
        • ループクリップ: 1回の完全なループが完了すると進みます。
        • 無限ループのシーケンス: すべての入力を通じて1回の完全なサイクルが完了すると進みます。
        • 有限ループのシーケンス: すべてのループが完了すると進みます。
      • トリガー: カスタム論理式が真であるときに次の入力をアクティブにします。
    • WaitForTrigger (ブール値): TransitionOverrideWaitForTriggerに設定されている場合のみ利用可能です。
プロパティ
プロパティタイプ説明
LoopCount数値シーケンス全体をサイクルする回数。0(デフォルト)の値は無限ループを示します。カウントに達すると、ノードは最終入力のループまたは保持設定を尊重します。
DefaultWaitForEnum.AnimationNodeWaitForすべての入力に適用される基本的な待機条件。各入力は独自のTransitionOverrideWaitFor入力プロパティでこれを上書きできます。
イベントデータ
  • イベント処理: 現在アクティブな入力からのイベントは、重みを変更せずに通過します。
  • イベント発生: シーケンス内の現在アクティブな入力からのすべてのイベントのみが通過します。遷移中、イベント発生はグローバルイベントルールに従います。

ランダムシーケンス

ランダムシーケンスノード

接続された入力の1つをランダムに選択して再生します。現在選択されているアニメーションが完了すると、ノードは別の入力をランダムに選択して再生します。各入力に特定の重みを割り当てて、選択される確率に影響を与えます。現在の選択が変更されるたびに、新しい遷移がトリガーされます。

入力
  • Input1...InputN
    • Weight (数値): この入力が選択される確率を決定します。重みが高いほど選択される可能性が高くなります。
プロパティ
プロパティタイプ説明
PlayCount数値ノードが停止する前に再生する入力の数。到達すると、ノードは最終入力のループまたは保持設定を尊重します。デフォルトは0で無限です。
Seed数値ランダム数生成器(RNG)を初期化するために使用される値で、異なるクライアント間でシーケンスが一貫性を保つことを保証します。デフォルトは-1でランダムシードです。
イベントデータ
  • イベント処理: 現在アクティブな入力からのイベントは、重みを変更せずに通過します。
  • イベント発生: シーケンス内の現在アクティブな入力からのすべてのイベントのみが通過します。遷移中、イベント発生はグローバルイベントルールに従います。

オーバー

オーバーノード

オーバーポーズをベースポーズの上に重ねます。マスクノードと組み合わせることで、オーバーポーズのマスクされた関節がベースポーズを完全に露出させ、透明なオーバーレイ効果を作成します。

入力
  • Base: 背景または下層、通常は移動やアイドル状態のフルボディアニメーションです。
  • Over: ベースの上に適用される前景または上層、手のジェスチャーやツール使用アニメーションなどです。
プロパティ
プロパティタイプ説明
Weight数値オーバーポーズを減衰させるために使用されるブレンド重み。デフォルトは1.0(完全オーバーライド)で、制限はありません。
イベントデータ
  • イベント処理:
    • ノードはベースオーバーの両方の入力からのイベントをリッスンします。
  • イベント発生:
    • ベースイベント: ベース入力からのすべてのイベントは変更されずに通過します。
    • オーバーイベント: オーバー入力からのイベントは重みプロパティによってスケールされます。
      • 重みが0.5の場合、オーバーイベントは半分の重みで伝播します。
      • 重みが0の場合、無効化されます。

加算

加算ノード

ベースポーズに加算ポーズを追加し、特定の重み(制限なし)で減衰させます。

入力
  • Base: 主なアニメーションポーズ。
  • Additive: ベースに重ねるポーズ。
プロパティ
プロパティタイプ説明
Weight数値ベースに適用される加算ポーズの強度を決定します。
イベントデータ
  • イベント処理: ノードはベース加算の両方の入力からのイベントをリッスンします。
  • イベント発生: ベースと加算の両方の入力からのすべてのイベントは変更されずに通過します。

減算

減算ノード

アニメーションを加算ポーズに変換し、ターゲットポーズから相対的なベースポーズを減算します(AWeight×BA - \text{Weight} \times B)。重みは減算前にBポーズをスケールします(制限なし)。

入力
  • A: ターゲットアニメーションポーズ。
  • B: 減算される相対的なベースポーズ。
プロパティ
プロパティタイプ説明
Weight数値BポーズがAから減算される前にスケールします。1.0(デフォルト)ではBが完全に減算され、0.0では減算は行われません。
イベントデータ
  • イベント処理: ノードは入力A入力Bの両方からのイベントをリッスンします。
  • イベント発生: 入力A入力Bの両方からのすべてのイベントは変更されずに通過します。

ブレンド1D

ブレンド1Dノード

単一の軸上の現在の入力位置に最も近い2つのアニメーションポーズの間で線形補間を行います。

入力
  • Input1...InputN
    • Position (数値): ブレンド軸上の各入力の特定の座標。
プロパティ
プロパティタイプ説明
Position数値アニメーションをサンプリングするために使用されるブレンド軸上の現在のアクティブな値。Positionが定義された入力位置の範囲外にある場合、ノードは最も近い2つの入力を使用して外挿します。
PhaseSyncEnum.AnimationNodePhaseSync

子入力のタイミングを同期させるかどうかを設定します。

  • 同期(デフォルト): 正規化された同期。ノードはアクティブな入力の重み付き平均に基づいて「仮想期間」を計算します。各入力ノードの時間ステップは調整され、すべての子が同じフェーズに収束し、異なる長さのアニメーションが同期します。
  • 非同期: クリップが独立して自分の再生速度で進む標準的なブレンド。
イベントデータ
  • イベント処理: ノードはすべての現在アクティブな子ノードからのイベントをリッスンします。
  • イベント発生: 最も重みの高いアクティブな入力からのイベントのみが伝播し、そのブレンド重みによってスケールされます。二次入力からのイベントは無効化されます。

ブレンド2D

ブレンド2Dノード

2D座標空間内の2つの入力パラメータに基づいて複数のアニメーションポーズをブレンドします。これは、移動方向と速度の両方に基づいてブレンドするなど、複雑なシナリオを処理するためにブレンド1Dノードを一般化します。

入力
  • Input1...InputN
    • X (数値): 各入力のX座標。
    • Y (数値): 各入力のY座標。
プロパティ
プロパティタイプ説明
InputModeEnum.AnimationNodeBlend2DInputMode

ブレンドスペースを評価するために使用される座標系を定義します:

  • デカルト(デフォルト): 標準の2Dグリッド座標を使用します。XとYはブレンドスペース内の現在の位置を表します。
  • 極座標: 角度と大きさの値を使用します。Xはラジアンでの方向を表し、Yは移動の大きさまたは強度を表します。方向は大きさよりも重視されるため、似た角度の入力が異なる大きさであっても、異なる角度の入力よりもスムーズにブレンドされます。
X数値現在のX座標(デカルト)またはラジアンでの方向(極座標)。
Y数値現在のY座標(デカルト)または大きさ(極座標)。
PhaseSyncEnum.AnimationNodePhaseSync

子入力のタイミングを同期させるかどうかを設定します。

  • 同期(デフォルト): 正規化された同期。ノードはアクティブな入力の重み付き平均に基づいて「仮想期間」を計算します。各入力ノードの時間ステップは調整され、すべての子が同じフェーズに収束し、異なる長さのアニメーションが同期します。
  • 非同期: クリップが独立して自分の再生速度で進む標準的なブレンド。
イベントデータ
  • イベント処理: ノードはすべての現在アクティブな子ノードからのイベントをリッスンします。
  • イベント発生: 最も重みの高いアクティブな入力からのイベントのみが伝播し、そのブレンド重みによってスケールされます。二次入力からのイベントは無効化されます。

マスク

マスクノード

入力ポーズに事前定義されたマスクを適用します。マスクは、リグ階層内のオブジェクト(例:関節)ごとに重みを定義することによって、アニメーションの精密な制御や「フェザーリング」を可能にします。

入力
  • Pose: マスクされるアニメーションポーズ。
プロパティ
プロパティタイプ説明
MaskObjectValue

マスクの重みを定義するObjectValue(マスクAnimationNodeDefinitionの直接の子として作成される)。これは2つの方法で機能します:

  • 直接: ObjectValue自体がリグオブジェクト名を特定の重み値にマッピングする属性を含みます。
  • 参照による: ObjectValueがマッピング属性を含む別のInstanceを参照します。これにより、グラフ内の異なるノード間で共有マスクが可能になります。

マスクを作成する際には、リグスキーマ(HumanoidRigDescriptionまたはPicker)を選択して階層を構築できます。

  • HumanoidRigDescription: ヒューマノイドキャラクターのマスクを標準化します。
  • Picker: ユーザーがワークスペース内の特定のリグを選択してマスク階層を構築できるようにします。
Invertブール値trueの場合、重み値を1 - 重みとして適用します。これにより、新しいアセットを作成せずに逆にマスクを再利用できます。
イベントデータ
  • イベント処理: ノードは入力ポーズからのすべてのイベントをリッスンします。
  • イベント発生: 入力ポーズからのすべてのイベントは変更されずに通過します。

スピード

スピードノード

受信アニメーションポーズの再生速度を変更します。

入力
  • Pose: 再生速度が変更されるアニメーションポーズまたはサブグラフ。
プロパティ
プロパティタイプ説明
Speed数値時間のデルタ(dtdt)に適用される倍率。0.0はグラフを一時停止し、1.0は通常の速度、2.0は倍速です。
イベントデータ
  • イベント処理: ノードは入力ポーズからのイベントをリッスンします。
  • イベント発生: 入力ポーズからのすべてのイベントは変更されずに通過します。視覚的な再生速度が変更される一方で、発生するイベント(マーカーなど)のタイミングは変更された再生速度に応じてスケールされます。

グラフ出力

グラフ出力ノード

グラフの最終的に評価されたポーズを表します。このノードは、アニメーショングラフエディター内のすべての新しいグラフに自動的に含まれます。その存在により、グラフは常に有効であり、一貫してアニメーションポーズを生成します。

入力
  • Pose: リグに適用される最終的な処理されたアニメーションデータ。
プロパティ
  • なし
イベントデータ
  • イベント処理: ノードは最終的に接続された入力から通過するすべてのイベントをリッスンします。
  • イベント発生: このノードはアニメーションパイプラインの出口ポイントとして機能し、グラフ内に信号を発生させません。

遷移

アニメーショングラフ内のいくつかのノード(セレクトプライオリティセレクトシーケンスランダムシーケンスなど)は、アクティブな入力間で切り替えるときのアニメーションのブレンド方法を管理します。ノードリファレンス内の冗長性を防ぐために、これらの動作は標準化された遷移プロパティグループによって定義されています。

デフォルト遷移

デフォルト遷移

ノードが新しいアクティブ入力に切り替わるときに適用される基本的なブレンド動作。

遷移オーバーライド

デフォルトの遷移を上書きする入力固有のリンクプロパティ。これらはノードがその特定の入力に遷移するときに適用されます。

レプリケーション

アニメーショングラフのパラメータと内部ノード状態は自動的にレプリケートされます。レプリケーションモードは、アニメートスクリプトが作成されたときのWorkspace.AuthorityModeによって決まります:

  • Enum.AuthorityMode.Automaticの場合: AnimationTrack:SetParameter()を介して設定されたパラメータは自動的に他のピアにレプリケートされます。
  • Enum.AuthorityMode.Serverの場合: サーバーがグラフの完全なシミュレーションを駆動します。Enum.AnimationNodeType.ClipNodeの経過時間やグラフパラメータなど、すべてのノード状態がサーバーからクライアントに自動的にレプリケートされます。所有者のプレイヤークライアントは、スムーズなローカル再生のために予測を使用します。

サンプルアニメートスクリプト

リグのアニメーショングラフを駆動するための例スクリプトを生成するには、アニメーショングラフエディターでグラフ -> アニメートスクリプトを作成を使用します。これにより、StarterCharacterScripts(プレイヤーキャラクター用)またはリグに直接配置されるスクリプト階層が生成されます:

Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)

アニメート ModuleScriptには、グラフのロードロジックが含まれています。RunClientおよびRunServerスクリプトは、適切なコンテキストでそれを呼び出します。どのスクリプトが含まれるかは使用ケースによって異なります:

使用ケース含まれるスクリプト動作
NPC(任意のモード)RunServerサーバーがグラフをロードして再生します。状態はすべてのクライアントに自動的にレプリケートされます。
プレイヤー + Enum.AuthorityMode.ServerRunServer + RunClientサーバーが権限を持ってグラフを駆動します。所有者のクライアントは、ロールバックベースのローカル予測のためにEnum.PredictionModeを有効にします。
プレイヤー + Enum.AuthorityMode.AutomaticRunClient所有者のクライアントがグラフをロードして再生します。パラメータは自動的にサーバーおよび他のクライアントにレプリケートされます。

アニメートスクリプトに保存される以下の属性は、その動作を構成します:

属性タイプ説明
GraphName文字列アニメーショングラフアセットの名前。
CharacterName文字列グラフがターゲットとするリグの名前。
SourceAssetId文字列グラフの公開アセットID。公開ゲームの実行時に使用されます。
IsServerAuthorityブール値Workspace.AuthorityModeServerに設定されて作成されたかどうか。レプリケーション戦略を決定します。
PreviewInStudioブール値trueの場合(デフォルト)、Studioのプレイテストは未発表のグラフをローカルにロードし、公開せずに反復できます。falseに設定すると、Studioで公開アセットをテストします。現在、Enum.AuthorityMode.Serverではサポートされていません。

自動モードでのパラメータレプリケーション

Workspace.AuthorityMode自動の場合:

  • 所有者のクライアントがプレイヤーキャラクターグラフを駆動し、サーバーがNPCグラフを駆動します。
  • AnimationTrack:SetParameter()を介して設定されたパラメータは自動的に他のピアにレプリケートされます。単一のフレーム内の複数のSetParameter呼び出しは統合されます(最後の書き込み者が勝ち)。
  • パラメータの輸送に追加のスクリプトは必要ありません — エンジンが内部でレプリケーションを処理します。
  • 他のクライアントは、わずかな遅延(1送信間隔とネットワーク遅延)でパラメータの更新を確認します。

サーバー権限

Workspace.AuthorityModeサーバーの場合:

  • サーバーがすべてのグラフに対して権限を持ち、シミュレーションを実行し、完全なグラフ状態をレプリケートします。
  • レプリケートされるもの: 経過時間、現在の選択、遷移の進行、ループカウント、RNGシードを含むパラメータと内部ノード状態。これにより、すべてのクライアントが同一のアニメーション動作を確認できます。
  • プレイヤーキャラクター: サーバーがグラフを駆動します。所有者のクライアントのRunClientスクリプトは自動的にEnum.PredictionModeAnimatorで有効にし、ローカルプレイヤーはスムーズで予測されたアニメーションを確認し、サーバーとの不一致を調整します。
  • NPC: サーバーがグラフを独占的に駆動し、クライアントはレプリケートされた状態を観察します。

パラメータの駆動

グラフを実行するすべてのスクリプトからAnimationTrack:SetParameter()を使用します:

  • NPC(任意のモード): RunServer(またはAnimationTrackにアクセスできる任意のサーバーScript)からSetParameterを呼び出します。
  • Enum.AuthorityMode.Serverのプレイヤーキャラクター: RunServerRunClientの両方からSetParameterを呼び出します。サーバーは権限のあるシミュレーションを駆動するためにパラメータが必要であり、所有者のクライアントもローカル予測を駆動するために同じパラメータが必要です。
  • Enum.AuthorityMode.Automaticのプレイヤーキャラクター: RunClient(またはAnimationTrackにアクセスできる任意のクライアントLocalScript)からSetParameterを呼び出します。

生成されたアニメートスクリプトには、開始点としてコメントアウトされたSetParameterブロックが含まれています。これをコメント解除して、ゲームプレイ状態(移動速度、ヒューマノイド状態、入力方向など)からパラメータを駆動するように変更します。

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。