アニメーショングラフエディターは、テクニカルアーティストやアニメーターがRoblox Studio内で直接複雑なアニメーションロジックを構築できる視覚的なノードベースのツールです。ブレンドツリーのような動作を作成するための効率的なインターフェースを提供することで、キャラクターの動きに対する手動スクリプトへの従来の依存を排除します。
このシステムは、既存のアニメーションワークフローと連携して機能します:
- アニメーションエディター: 個々のクリップを作成し、キーフレームやカーブを微調整するための主要なツールとしてアニメーションエディターを引き続き使用します。
- アニメーショングラフエディター: このツールを使用して、これらのクリップを整理し、洗練されたゲームプレイ動作を駆動するロジックツリーを構築します。
コラボレーションを強化するように設計された視覚的なグラフは、開発者がアニメーターによって作成されたロジックを迅速に検査、デバッグ、理解できるようにします。アーティストがインタラクティブな動きを洗練することに集中している間、開発者はブレンドされたアニメーションや状態を直接制御するためにアニメーショングラフノードにプログラム的にアクセスできます。
グラフを構築する
アニメーション可能なキャラクターのロジックを構築するには、Studioリボンのアバタータブからアニメーショングラフエディターにアクセスします。以下の手順は、リグを初期化し、デフォルトの歩行および手を振るアニメーションを使用して基本的なノードネットワークを構築する方法を示しています。
実用的なアプリケーションについて詳しく知りたい場合は、アニメーショングラフリファレンスファイルを参照してください。このファイルには、基本的な実装例と複雑な実装例が含まれています。
独自のアニメーショングラフを作成するには、リファレンスに提供されている基本的な例に似た手順を使用します:
Studioで、アバタータブに移動し、キャラクター ⟩ マイアバターを選択して、アニメーション可能なリグを追加します。

アバタータブのグラフエディターに移動してアニメーショングラフエディターを開きます。

3Dビューポートでアニメーション可能なリグを選択します。グラフエディタービューで、左上隅のグラフを選択し、新規を選択して新しいグラフを作成します。
グラフエディターで右クリックし、ノードを挿入 ⟩ クリップを選択します。

新しいクリップノードで、アニメーションIDを設定します。
アニメーションIDドロップダウンを選択します。
特定のアニメーションアセットIDを提出するには、インポートをクリックします。

アニメーションIDフィールドにデフォルトの歩行アニメーションを追加します: 507777826。
インポートを選択します。
デフォルトの手を振るアニメーション: 507770239を使用して、手順4-5を繰り返して別のクリップノードを追加します。

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

クリップノードを追加ノードに接続します。右上の出力コネクタを適切なポートにドラッグします:
- 歩行アニメーションのクリップノードをベースポートに接続します。
- 手を振るアニメーションのクリップノードを加算ポートに接続します。

追加ノードから、右上の出力コネクタをグラフ出力ポーズポートに接続します。

- オプションSpeed変数にパラメータを割り当てます。
緑のスピードポートを空の領域にクリックしてドラッグします。新しいパラメータノードが表示されます。

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

再生ボタンを押してアニメーションをテストします。

様々な重み、速度、再生モード、その他のアニメーションをテストしてみてください。個々のノードに関する詳細は、ノードリファレンスを参照してください。
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)ノードリファレンス
グローバルイベントルール
すべてのノードおよびトランジションに対して、以下のルールがデフォルトで適用されます:
- イベントは、ソースノードからグラフを通じて上方に伝播します。各イベントは、最終的なブレンドにおけるソースの影響を表す重みを持ちます。重みがゼロに達した場合、その時点でイベントは無効になります。
- カスタムイベントロジックを持たないノードは、すべてのイベントを変更せずに通過させます。入力間でブレンドまたは選択するノードは、重みをスケールしたり、非主要入力からのイベントをブロックすることがあります(ノードごとのイベントセクションを参照)。
- グラフの最上部に到達したマーカーイベントは、AnimationTrack:GetMarkerReachedSignal()を介して観察できます。
トランジション
アニメーショングラフ内のいくつかのノード(選択、優先選択、シーケンス、およびランダムシーケンスなど)は、アクティブな入力間で切り替えるときにアニメーションがどのようにブレンドされるかを管理します。ノードリファレンスの冗長性を防ぐために、これらの動作は標準化されたトランジションプロパティグループによって定義されています。
デフォルトトランジション

ノードが新しいアクティブ入力に切り替わるときに適用される基本的なブレンド動作。
- DefaultTransitionDuration (number): 新しいポーズに完全にブレンドするのにかかる時間(秒)。
- DefaultTransitionCurve (Enum.PoseEasingStyle): ブレンド中に適用されるイージング関数。現在はEnum.PoseEasingStyle.LinearとEnum.PoseEasingStyle.CubicV2のみをサポートしています。
トランジションオーバーライド

デフォルトのトランジションを上書きする入力特有のリンクプロパティ。ノードがその入力に切り替わるときに、期間とカーブのオーバーライドが適用されます。ただし、BeforeFinishedトランジションは、出力入力のオーバーライドを使用します。
- TransitionOverrideDuration (number): デフォルトのトランジション期間をオーバーライドします。
- TransitionOverrideCurve (Enum.PoseEasingStyle): デフォルトのトランジションカーブをオーバーライドします。現在はEnum.PoseEasingStyle.LinearとEnum.PoseEasingStyle.CubicV2のみをサポートしています。
トランジションタイミング
シーケンスノードタイプの場合、次の設定がシーケンスが次の入力に進むタイミングを制御します:
- WaitFor (Enum.AnimationNodeWaitFor): 進む条件を設定します。Enum.AnimationNodeWaitFor|Finished(デフォルト)を使用して、現在の入力が終了するかループを完了するのを待つか、Enum.AnimationNodeWaitFor|Triggerを使用してWaitForTriggerがtrueのときに進むようにします。ノードレベルのデフォルトはDefaultWaitForで設定するか、入力のオーバーライドにはTransitionOverrideWaitForを使用します。
- When (Enum.AnimationNodeTransitionWhen): Wait ForがEnum.AnimationNodeWaitFor|Finishedのときに適用されます。ノードレベルのデフォルトはDefaultTransitionWhenで設定するか、出力入力のオーバーライドにはTransitionOverrideWhenを使用します。
- Enum.AnimationNodeTransitionWhen|Finished(デフォルト): 現在の入力が終了した後にブレンドを開始します。
- Enum.AnimationNodeTransitionWhen|BeforeFinished: 現在の入力が終了する前のトランジション期間の1つ前にブレンドを開始し、ブレンドがアニメーションの終了に重なるようにします。たとえば、0.2秒のトランジションはアニメーションの最後の0.2秒中に開始されます。
RandomSequenceNodeもDefaultTransitionWhenとTransitionOverrideWhenをサポートしており、ブレンドが開始されるタイミングを制御します。
ステートマシントランジションについては、トランジションプロパティを参照してください。
レプリケーション
アニメーショングラフのパラメータと内部ノード状態は自動的にレプリケートされます。レプリケーションモードは、アニメートスクリプトが作成されたときの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.Server | RunServer + RunClient | サーバーが権限を持ってグラフを駆動します。所有者のクライアントは、ロールバックベースのローカル予測のためにEnum.PredictionModeを有効にします。 |
| プレイヤー + Enum.AuthorityMode.Automatic | RunClient | 所有者のクライアントがグラフをロードして再生します。パラメータは自動的にサーバーおよび他のクライアントにレプリケートされます。 |
アニメートスクリプトに保存され、動作を構成する以下の属性があります:
| 属性 | タイプ | 説明 |
|---|---|---|
| GraphName | String | アニメーショングラフアセットの名前。 |
| CharacterName | String | グラフがターゲットとするリグの名前。 |
| SourceAssetId | String | グラフの公開アセットID。公開ゲームの実行時に使用されます。 |
| IsServerAuthority | Boolean | Workspace.AuthorityModeがServerに設定されて作成されたかどうか。レプリケーション戦略を決定します。 |
| PreviewInStudio | Boolean | 真の場合(デフォルト)、Studioのプレイテストは未発表のグラフをローカルにロードし、公開せずに反復できます。偽に設定すると、Studioで公開アセットをテストします。現在、Enum.AuthorityMode.Serverではサポートされていないことに注意してください。 |
自動モードでのパラメータレプリケーション
Workspace.AuthorityModeが自動の場合:
- 所有者のクライアントがプレイヤーキャラクターのグラフを駆動し、サーバーがNPCのグラフを駆動します。
- AnimationTrack:SetParameter()を介して設定されたパラメータは、自動的に他のピアにレプリケートされます。単一フレーム内の複数のSetParameter呼び出しは、最後の書き込み者が勝ちます。
- パラメータの輸送に追加のスクリプトは必要ありません — エンジンが内部でレプリケーションを処理します。
- 他のクライアントは、わずかな遅延(1回の送信間隔とネットワーク遅延)でパラメータの更新を確認します。
サーバー権限
Workspace.AuthorityModeがサーバーの場合:
- サーバーがすべてのグラフに対して権限を持ちます — シミュレーションを実行し、完全なグラフ状態をレプリケートします。
- レプリケートされるもの: パラメータと内部ノード状態、経過時間、現在の選択、トランジションの進行、ループカウント、RNGシードを含みます。これにより、すべてのクライアントが同一のアニメーション動作を確認できます。
- プレイヤーキャラクター: サーバーがグラフを駆動します。所有者のクライアントのRunClientスクリプトは、ローカルプレイヤーがスムーズで予測されたアニメーションを見られるように、サーバーとの不一致を調整するためにEnum.PredictionModeを自動的に有効にします。
- NPC: サーバーがグラフを独占的に駆動します。クライアントは、ローカルシミュレーションなしでレプリケートされた状態を観察します。
パラメータの駆動
グラフを実行するすべてのスクリプトからAnimationTrack:SetParameter()を使用します:
- Enum.AuthorityMode.Serverのプレイヤーキャラクター: RunServerとRunClientの両方からSetParameterを呼び出します。サーバーは権限のあるシミュレーションを駆動するためにパラメータが必要であり、所有者のクライアントもローカル予測を駆動するために同じパラメータが必要です。
- Enum.AuthorityMode.Automaticのプレイヤーキャラクター: RunClient(またはAnimationTrackにアクセスできる任意のクライアントローカルスクリプト)からSetParameterを呼び出します。
生成されたアニメートスクリプトには、開始点としてコメントアウトされたSetParameterブロックが含まれています。これをコメント解除して、ゲームプレイ状態(移動速度、ヒューマノイド状態、入力方向など)からパラメータを駆動するように変更します。