ステートマシンは、アニメーションノードをアイドル、歩行、走行、ジャンプなどの名前付きステートに結合します。アクティブなステートを再生し、遷移条件がtrueに評価されると別のステートにブレンドします。ステートマシンを使用して、遷移ロジックをLuauで記述することなく、どのアニメーションが互いに続くことができるかを定義します。
各ステートは、ステートマシンの入力に接続されます。ステートはクリップ、ブレンドノード、または別のステートマシンであることができます。ステートマシンは、アクティブなアニメーションポーズまたは遷移中の2つのポーズのブレンドを出力し、それをグラフ内の次のノードに接続します。
前提条件
ステートマシンを作成する前に、アニメーショングラフエディタに慣れておき、それを開いてアニメーショングラフを作成する方法を理解してください。
ステートマシンの作成
以下の例では、JumpFallLandRunExampleからの3つのステート、Locomotion、Fall、LandIdleを使用します。キャラクターは通常に移動し、空中にいるときに落下アニメーションに切り替え、着地アニメーションを再生してからロコモーションに戻ります。これらの手順はステートマシンに焦点を当てており、ロコモーション、落下、着地のためのアニメーションノードから始めます。
グラフエディタで右クリックし、ノードの挿入 ⟩ ステートマシンを選択します。

ステートマシンノードで開くをクリックします。ステートマシンビューで、ステートの作成を使用して、Locomotion、Fall、LandIdleという3つのステートを追加します。

グラフに戻るをクリックし、アニメーションノードを対応するステートマシンの入力に接続します:
- Locomotion:ロコモーションアニメーションを接続します。参照グラフでは、Blend1DNodeという名前のIdleRunBlendを使用して、Speedに基づいてアイドルと走行アニメーションをブレンドします。
- LandIdle:着地クリップを接続し、再生モードをEnum.AnimationNodePlayMode|OnceAndHoldに設定して、終了してロコモーションに戻ることができるようにします。
ステートマシンの出力をグラフ出力のポーズ入力に接続します。

ステートマシンビューを再度開き、(エントリ)からLocomotionへの遷移をドラッグします。グラフが開始されると、このステートでステートマシンが開始します。

Groundedという名前のブールグラフパラメータを追加し、trueに設定します。このパラメータは、キャラクターが地面にいるかどうかを示します。
次の遷移を追加します。ソースステートから宛先ステートに接続をドラッグし、各遷移を設定します:
- FallからLandIdle:待機を式に設定し、式をGroundedに、長さを0.1秒に設定します。キャラクターが地面に触れると、着地アニメーションが始まります。
- LandIdleからLocomotion:待機を終了に設定し、いつをEnum.AnimationNodeTransitionWhen|BeforeFinishedに、長さを0.2秒に設定します。着地アニメーションの最後の0.2秒間に、ステートマシンはロコモーションに戻るブレンドを開始します。

すべての遷移の曲線はデフォルト(Linear)のままにします。グラフをプレビューし、Groundedをfalseに変更してFallに入り、次にtrueに戻してLandIdleを再生し、Locomotionに戻ります。
キャラクターが離れたり地面に触れたりする際に、ゲームプレイコードからGroundedを更新します。ロコモーションブレンドがSpeedを使用している場合、キャラクターが移動する際にそのパラメータを更新します。パラメータワークフローについては、API統合を参照してください。
ジャンプや追加の着地ステートでステートマシンを拡張して、完全な移動グラフを作成します。JumpFallLandRunExampleには、立っているときと走っているときのための別々のジャンプ、さらに移動と落下速度に基づく異なる着地が含まれています。
ステートマシンのプロパティ
ステートマシンノードのプロパティ
- 入力
- State1...StateN:各ステートを定義するアニメーションノード。ステートの名前は、ステートマシンノードへの入力の名前と一致する必要があります。
- プロパティ
プロパティ タイプ 説明 EntryState ObjectValue グラフが開始されるときにアクティブなステートを指すAnimationNodeDefinitionを指すObjectValue。 - イベントデータ
- イベント処理:アクティブなステートからのイベントは、重みが変更されることなく通過します。
- イベント発生:アクティブなステートからのイベントのみが通過します。遷移中、イベント発生はグローバルイベントルールに従います。
遷移プロパティ
遷移には1つ以上のソースステート、宛先ステート、および条件があります。アクティブなステートがソースステートと一致すると、ステートマシンは条件をチェックします。条件がtrueに評価されると、宛先ステートにブレンドします。
待機は遷移条件UIを決定します。式(Enum.AnimationNodeWaitFor|Trigger)を選択すると、式ボックスが表示されます。式は、ShouldJumpのようなブールグラフパラメータを直接参照するか、Speed >= 12のような条件を評価できます。終了(Enum.AnimationNodeWaitFor|Finished)を選択すると、いつのドロップダウンが表示されます。
複数の遷移が真の式を持つ場合、ステートマシンは最も高い優先度値を持つ遷移を最初に評価します。優先度が同じ場合は、ランダムに1つの遷移を選択します。競合する遷移に異なる優先度を割り当てて、結果を予測可能にします。
| プロパティ | タイプ | 説明 |
|---|---|---|
| From | ObjectValue | 遷移を開始できるステートを指すAnimationNodeDefinitionを指すObjectValue。**(任意)**遷移の場合は、このプロパティを設定しないでください。 |
| To | ObjectValue | 宛先ステートを指すAnimationNodeDefinitionを指すObjectValue。 |
| WaitFor | Enum.AnimationNodeWaitFor | どの遷移条件UIが表示されるかを決定します。Enum.AnimationNodeWaitFor|Triggerは式ボックスを表示します。Enum.AnimationNodeWaitFor|Finishedはいつのドロップダウンを表示します。 |
| When | Enum.AnimationNodeTransitionWhen | 待機が終了のときに利用可能です。Enum.AnimationNodeTransitionWhen|Finishedを選択すると、ソースステートが終了した後に開始され、Enum.AnimationNodeTransitionWhen|BeforeFinishedを選択すると、ソースステートが終了する1つの期間前にブレンドを開始します。 |
| Expression | 文字列 | 待機が式のときに利用可能です。ブールグラフパラメータまたは式で、trueに評価されると遷移が開始されます。サポートされている内容については式を参照してください。 |
| Priority | 数値 | 複数の式が真であるときに使用される順序。高い値が優先されます。有効な値は0から65,535までです。 |
| Duration | 数値 | 宛先ステートにブレンドする時間(秒単位)。デフォルトは0.15秒です。 |
| Curve | Enum.PoseEasingStyle | ブレンド中に使用されるイージング。LinearとCubicV2のみがサポートされています。デフォルトはLinearです。 |