ステートマシン

ステート マシンを使用して、ロジックに基づいて分岐するアニメーションを作成します。

ステート マシン は、アニメーション ブループリント で作成できるモジュール型システムで、再生可能な特定のアニメーションとそのアニメーションを再生できるタイミングを定義することができます。主に、このタイプのシステムは、アイドル状態、歩く、走る、ジャンプといったキャラクターの動作の状態 (ステート) にアニメーションを関連付けるために使用されます。ステート マシンを使用すると、ステート を作成し、そのステートで再生するアニメーションを定義して、他のステートに切り替えるタイミングをコントロールするさまざまなタイプの 遷移 を作成することができます。これにより、過度に込み入ったアニメーション グラフを使用しなくても、複雑なアニメーション ブレンドを簡単に作成できます。

このドキュメントでは、アニメーション ブループリントでのステート マシン、ステート、および遷移の作成および使用方法の概要について説明します。

前提条件

作成および設定

ステート マシンは、アニメーション グラフ 内で作成されます。ステート マシンを作成するには、アニメーション グラフ 内を右クリックし、[State Machines (ステート マシン)] > [Add New State Machine (新規のステート マシンを追加)] を選択します。追加された New State Machine を Output Pose に接続します。

add new state machine

ステート マシンはアニメーション グラフのサブグラフであるため、[My Blueprint (マイ ブループリント)] パネル内にステート マシン グラフを表示することができます。このグラフをダブルクリックすると、ステート マシンが開きます。

new state machine

また、アニメーション グラフ内の State Machine ノードをダブルクリックして開くこともできます。

エントリ ポイント

すべてのステート マシンは Entry ポイントから始まります。通常、このポイントは、デフォルトのステート を定義するために使用されます。一般的なロコモーションの設定では、キャラクターのアイドル ステートがデフォルトのステートにあたります。

デフォルトのステートを作成するには、entry 出力ピンをクリックしてドラッグし、マウスを離すと、コンテキスト メニューが表示されます。[Add State (ステートを追加)] を選択します。これにより、新しいステートが作成されてエントリ出力に接続され、このステートがデフォルトでアクティブになります。

state entry point

ステート

ステートとは、ステート マシン内で編成されているサブセクションで、定期的にステート同士で相互に遷移することができます。ステート自体には独自のアニメーション グラフ レイヤーが含まれており、あらゆる種類のアニメーション ロジックを含めることができます。たとえば、アイドル ステートにはキャラクターのアイドル アニメーションのみが含まれている場合がありますが、武器ステートにはさらに射撃と照準のロジックが含まれていることがあります。どのロジックを使用していても、ステートの目的は、そのステートに固有の最終的なアニメーションまたはポーズを生成することです。

ステートを作成する

ステートは次の複数の方法で作成できます。

  • ステート マシン グラフを右クリックし、[Add State (ステートを追加)] を選択します。

    add state

  • ステートの境界線 (またはエントリ出力) をクリックしてドラッグし、マウスを離して [Add State] を選択します。また、この操作により 遷移 で前のステートに接続されます。

    drag add state

  • コンテンツ ブラウザ または アセット ブラウザ から、Animation アセット をステート マシン グラフにドラッグします。この操作により、アニメーションもステートに追加され、そのアニメーションが Output Pose に接続されます。

    drag and drop add state

ステート マシンは、ステートを必要な数だけ含むことができます。また、ステート マシンの下にサブグラフとして表示されます。

states in my blueprint panel

ステートを編集する

ステートの内部の処理を表示するには、[My Blueprint (マイ ブループリント)] パネルでそのステートをダブルクリックするか、ステート マシン グラフでノード自体をダブルクリックします。この操作でステートが開きます。

open state

アニメーション グラフと同様に、ステートにはアニメーション ロジックを接続するための最終的な Output Pose ノードが含まれます。ステートがアクティブな場合は、そのロジックが実行されます。別のステートがアクティブな場合は、そのロジックは実行されません。この Idle ステートの例では、Idle アニメーションが Output Pose に接続されています。このステートがアクティブになると、この結果のアニメーションが再生されます。

state preview

ステートのプロパティ

ステートが選択されているときは、[Details (詳細)] パネルで次のプロパティを表示、編集することができます。

state properties

名称

説明

Name

選択されているステートの名前。

Entered State Event (Custom Blueprint Event)

[Custom Blueprint Event] フィールドで使用されている名前で スケルトン通知 を作成します。ステートがアクティブになり、遷移が開始されると、この通知が実行されます。通常のスケルトン通知と同様に、アニメーション ブループリントの イベント グラフ でこれを作成することで、イベントにアクセスできます。

entered state custom blueprint event

Left State Event (Custom Blueprint Event)

フィールドで使用されている名前でスケルトン通知を作成します。別のステートとのブレンドが開始されると、この通知が実行されます。

Fully Blended State Event (Custom Blueprint Event)

[Custom Blueprint Event] フィールドで使用されている名前でスケルトン通知を作成します。このステートが完全にブレンドされると、この通知が実行されます。

Always Reset on Entry

このプロパティを 有効にする と、このステート内のすべてのアニメーションがデフォルト値に再初期化されます。多くの場合、これは以下を意味します。

  • シーケンス プレイヤーが、アニメーションの開始時刻に再スタートする。

  • プロパティがデフォルト値で初期化される。

無効 な場合、すべてのアニメーションとそのプロパティは、このステートから他のステートに遷移して、このステートに戻っても前の再生ステートおよびその他のプロパティが維持されます。つまり、アニメーションが「中断したところから再開」されます。

遷移

どのステートを相互にブレンドするかをコントロールするには、遷移 を作成します。遷移はステート マシンの構造を定義するステート間のリンクです。

transition

遷移を作成するには、ステートの枠線から別のステートにドラッグします。この例では、Idle ステートRun ステート と双方向に接続されています。これは基本的なロコモーションのステート マシンでは一般的な設定です。遷移は一方向であるため、2 つのステートを往復させる場合は、各方向に遷移を作成する必要があります。

create transition

また、遷移ノードを選択して別のステートにドラッグすることにより、既存の遷移ロジックを再バインドすることもできます。遷移矢印を新しいバインディングにドラッグすると、複数の遷移ノードを一度に再バインドすることができます。

create transition

遷移遷移ルール の詳細については、「遷移」を参照してください。

TopicIcon.png

遷移ルール

遷移を使用してステート マシン内の複数のステート (状態) をブレンドします。

遷移を使用してステート マシン内の複数のステート (状態) をブレンドします。

コンジット

通常の遷移がステート間の 1 対 1 の遷移であるのに対して、コンジット では 1 対多、多対 1、多対多の遷移を行うことができます。このため、コンジットはより高度で共有可能な遷移リソースとして機能します。

コンジットを作成するには、ステート マシン グラフを右クリックし、[Add Conduit (コンジットを追加)] を選択します。

add conduit

コンジットはさまざまな方法で使用できます。たとえば、ステート マシンのエントリ ポイントを分岐させるために使用することができます。その後、コンジットの遷移を使用して、どのステートをデフォルトとして開始するかを選択することができます。この例は、ステート マシンを他のアニメーション (アニメーション モンタージュ など) で上書きして再初期化する場合に役立ちます。

conduit connections

上の例では、[ステート マシンの Details (詳細)] パネルAllow Conduit Entry States を有効にする必要があります。

コンジットには独自の 遷移ルール があり、Conduit ノードをダブルクリックするか、[My Blueprint] パネルからコンジット グラフを開いて確認することができます。デフォルトでは、コンジットの遷移ルールは False を返します。ほとんどの場合、Can Enter Transition をオンにするだけで、コンジットへのまたはコンジットからの個々の遷移に関する遷移ルールのロジックを作成することができます。

allow conduit passthrough

遷移および遷移ルールの詳細については、「遷移ルール」を参照してください。

ステータス エイリアス

多くのステートとステータス間の遷移方法を複数含むステート マシンを作成する場合は、ステート エイリアス を使用すると、より適切なグラフを作成できます。ステート エイリアスは、ステート マシンに追加できるショートカットタイプのノードで、行を整然とした状態に保ち、遷移を統合することで、グラフの見やすさを向上させることができます。

Alias_OFF.png

Alias_ON.png

エイリアスを使用していないステート マシン

エイリアスを使用しているステート マシン

ステート エイリアスを作成するには、ステート マシン グラフを右クリックし、[Add State Alias (ステート エイリアスを追加)] を選択します。

add state alias

ステート エイリアスを機能させるには、そのステートに遷移することができるステートを定義し、通常の遷移方法を使用してそのエイリアスを他のステートに接続します。ステート エイリアス ノードをクリックすると、[Details] パネルで以下を確認することができます。

  • ステート マシン内の各ステートが、プロパティとして表示されます。ステートを有効にすると、プロパティにより、そのステートが、エイリアスから他のステートに対して行われる遷移やルールを採用します。つまり、そのプロパティで、エイリアスに「遷移する」ステートを定義します。

  • [Global Alias (グローバル エイリアス)] を有効にすると、すべてのステートがエイリアスに遷移します。リストされているすべてのステートを有効にしても同じように機能しますが、[Global Alias] を有効にすると、後から作成される新しいステートも含むことができます。

    グローバル エイリアスは、インタラクション、攻撃、その他同様のアニメーションなど、1 フレーム入力および期間が限られているステートに限り、使用することをお勧めします。期間が限られていないステートでグローバル エイリアスを使用すると、他のステートが常にグローバル エイリアスに遷移しないよう、他のすべてのステート遷移の間に複雑なロジックを追加する必要がある場合があります。

alias properties

エイリアスの例

この例では、少し単純なステート マシンでは、着地 ステートと ロコモーション ステートが、ジャンプ落下ループ の両方のステートに遷移することを要求しています。合計 4 つの遷移が使用されており、それぞれに独自の遷移ルールがあります。

before alias example

ステート エイリアスを使用すると、このグラフを整理することができます。同じ効果を得るためには、次を実行することができます。

  • ステート エイリアスを作成し、落下ループジャンプ の両方のステートに遷移させます。

  • ステート エイリアスを選択し、ロコモーション着地 を有効にします。

after alias example

ステート エイリアスは、有効なすべてのステートの遷移を統合するため、ステート エイリアスを使用すると、これらのステートは同じ遷移ルールおよびプロパティを共有します。特定の遷移に異なるルールやブレンド期間などのプロパティを設定したい場合は、該当するステートに一意の遷移を作成する必要があります。

ステート マシンのプロパティ

ステート マシンには、[Details] パネルに以下のプロパティがあります。

state machine properties

名称

説明

Name

選択されているステート マシンの名前。

Max Transitions Per Frame

この数値は、1 フレームまたは 1 ティックで発生する遷移または 決定 の数を定義します。ステート マシンに多くのステートと遷移があり、所定の期間に複数の遷移が true になる場合は、この数値を「1」に設定することをお勧めします。これにより、一度に行うことができる決定は 1 つのみになり、決定や遷移の競合を防止することができます

Skip First Update Transition

ステート マシンに 関連性 が生じた場合、Entry ポイントに接続されているデフォルトのステートに初期化されます。その時点で、通常のステート マシンのプロセスが開始され、有効な遷移が行われます。

  • このプロパティが有効な場合、初期化時に有効な遷移先であるデフォルト以外のステートは、直ちに遷移します。

  • 無効な場合、有効な遷移先は通常どおりブレンドされます。

これは、目的の動作を達成させるために、デフォルト以外のステートがデフォルト ステートであるかのように動作できるようにするためです。たとえば、シンプルな Idle および Run のステート マシンがある場合、Idle はデフォルトのステートで、Run に遷移することができます。Skip First Update Transition を有効にし、ステート マシンの初期化時に Run 遷移ルールが true の場合、Run は直ちに初期化され、100% までブレンドされます。

Reinitialize on Becoming Relevant

このプロパティを有効にすると、ステート マシンに関連性が生じたときに、最初に入力されたステートが再初期化されます。この設定は、ステートごとのプロパティ Always Reset on Entry と同じように動作しますが、入力された最初の初期化済みのステートのみがリセットされます。

Create Notify Meta Data

遷移ルールで アニメーション通知関数 を使用する場合、このプロパティを有効にすると、すべての関連データがこれらの通知関数に送信されます。無効にすると、どの通知関数も機能しません。

Allow Conduit Entry States

これを有効にすると、コンジット をエントリ ステートとして使用できるようになり、コンジットの遷移ルールに応じてデフォルトのステートを変更できるようになります。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル