遷移ルールの作成
遷移ルール は、ステート マシン 内のフローを制御する方法であり、ステート と コンジット を接続するワイヤーで自動作成されます。遷移ルールでは、変数値に対していくつでもチェックやテストを実行することができます。こうしたチェックやテストでは全て True または False を出力し、遷移を通してアニメーションが動くことができるかを決めます。
ステートやコンジットを接続するには、あるステート (またはコンジット) をクリックして別のものにドラッグします。
接続できたら、遷移ルールは以下のように接続内で方向を持つ小さな丸いアイコンで表示されます。
このアイコン上にマウスオーバーすると何のルールかが視覚的に表示されます。
この例では、JumpLoop から JumpEnd に遷移するために、変数 IsInAir? が true であっては なりません。
ルールは遷移のフローを双方向で決定するように設定することができます。
つまり、あるステートから出て、その後に他のステートに移動するようにルールを設定可能であり、そのステートに戻る遷移になるようにルールを適用できます。
遷移ルールの編集
Transition Rule (遷移ルール) をダブルクリックすると、ウィンドウが開きます。このウィンドウで、遷移が起こるために満たさなければならない変数を定義できます。
ブループリント と同様に、My Blueprint ウィンドウで変数を指定し、それをグラフにドラッグすることができます。変数を様々な条件に接続し、それらを Result ノードに接続することで、遷移が起こるために何が true (または false) であるべきかを定義できます。
ブループリントの使用を開始するための情報は、ブループリント入門 のドキュメントをご覧ください。
遷移ルールの詳細
遷移ルールをクリックすると、[Details (詳細)] パネルが更新され、追加のオプションが利用できるようになります。
| プロパティ | 説明 |
|---|---|
| Transition Priority Order | 遷移の優先順位。あるステートからの複数の遷移が同時に true である場合、一番小さい数字の優先順位の高いものが優先されます。 |
| Bidirectional | 遷移が双方向であるか否かを決定します。 |
| Blend Logic | 以下の遷移ロジックから指定します。Standard Blend、Inertialization、Custom Blend。 |
| Transition Rule Sharing | 他の遷移とルールを共有できるか否か、または他の遷移からのルールを使用するかを設定することができます。 |
| Automatic Rule Based on Sequence Player in State | 内部時間は無視して最も関係のあるプレイヤーのノードの残り時間と遷移のクロスフェード持続時間に基づき自動的にルールを設定しようとします。 |
| Transition Crossfade Sharing | 既存の Transition Crossfade Blend を使用する、または既存の Transition Crossfade を共有に昇格します。 |
| Duration | クロスフェードに適用する持続時間。 |
| Mode | クロスフェードに適用するブレンドのタイプ。詳細は Animation ブレンドモード を参照してください。 |
| Custom Blend Curve | ユーザー指定のブレンドカーブを取り込み、それをブレンド中に適用します。 |
| Blend Profile | ボーン単位で遷移を評価するために使うブレンド プロファイルです。 |
| Transition Interrupt | Trigger Weight Threshold を設定し、Notify State Class を指定します。 |
| Start Transition Event / Custom Blueprint Event | 遷移開始時に通知されたブループリント内からイベントを呼び出し実行します。 |
| End Transition Event / Custom Blueprint Event | 遷移終了時に通知されたブループリント内からイベントを呼び出し実行します。 |
| Interrupt Transition Event / Custom Blueprint Event | 遷移中断時に、通知されたブループリント内からイベントを呼び出し実行します。 |
Inertialization
慣性ブレンドはブレンドの一種ですが、Inertialization システム自体はソース アニメーションからのサンプリングをしません。その代わり、新しいアニメーションへの切り替えを開始した時間のモーションを継承するベロシティとアクセラレーションを使って、モーションを持続させます。
詳細は、Inertialization をご参照ください。
Inertialization を有効にするには、[Details (詳細)] パネルで Blend Logic プロパティを Inertialization に設定します。
または、任意の Blend ノード 上で [Transition Type (遷移の種類)] を Inertialization に設定します。
AnimGraph で慣性ブレンディングを使う場所を Inertialization ノードで指定する必要があります。
以下の動画では、Inertial Blend だけではなく Standard Blend も説明しています (再生速度は遷移を説明するために変更されています)。
この動画では、アニメーションのつなぎに Standard Blend が使用されています。アニメーションは両方とも同時にサンプリングされ、遷移中にクロスフェードします。
Blend Logic に Inertialization を適用する場合、Locomotion と最終的な出力ポーズの間に Inertialization ノードを追加します。これにより、ステート間の遷移が瞬間的になり、次のポーズへモーションが継続します。
Custom Blends
上記のノード以外にも、一回限りのカスタム遷移アニメーションだけではなく、さらに使用できるようにカスタム ブレンド グラフにエクスポーズされる情報もあります。
| 番号 | ノード | 説明 |
|---|---|---|
| 1 | State Weight | 指定されたステートのブレンド ウェイトを取得します。 |
| 2 | Get Transition Time Elapsed | 指定された遷移の秒単位の経過時間を取得します。 |
| 3 | Get Transition Time Elapsed (ratio) | 指定された遷移のクロスフェードの持続時間の割合として経過時間を取得します。 |
| 4 | Get Transition Crossfade Duration | 指定された遷移のクロスフェードの持続時間を取得します。 |
遷移ルールのようにアセット プレイヤーを参照する get ノードを使用することもできます。
Unreal Engine のアニメーションのプログラミングを理解している場合は、パフォーマンスを向上させるために ネイティブの getter をご利用いただくこともできます。
その他の検討事項
子 Animation ブループリント で作業し、ステートマシンでアニメーションをオーバーライドする場合、遷移ルールによって参照されるアニメーションは、すべての子 Animation ブループリントで同じ長さである必要はありません。Time Remaining ノードのようなノードを使用する場合 (アニメーションの残り時間を判断し、遷移ルールの一部として使用可能)、こうしたタイプのノードは、子 Animation ブループリントでアニメーションがオーバーライドされる場合にアニメーションの長さの変化に正しく対応します。
変更されたり、オーバーライドされることがある遷移ルールの一部として特定のアニメーションを対象にするのではなく、いくつかのクラス ベースの get ノードを使用して、ソース ステートから最も重み付けが高いアニメーションを常に選ぶことができます (以下の図)。
| 番号 | ノード | 説明 |
|---|---|---|
| 1 | Get Relevant Anim Length (Movement) | ソース ステートで最も関連性のあるアニメーションの秒数を取得します。 |
| 2 | Get Relevant Anim Time (Movement) | ソース ステートで最も関連性のあるアニメーションの現在の累積時間の秒数を取得します。 |
| 3 | Get Relevant Anim Time Fraction (Movement) | ソース ステートで最も関連性のあるアニメーションの長さの割合として現在の累積時間を取得します。 |
| 4 | Get Relevant Anim Time Remaining (Movement) | ソース ステートで最も関連性のあるアニメーションの残り時間を秒単位で取得します。 |
| 5 | Get Relevant Anim Time Remaining Fraction (Movement) | ソース ステートで最も関連性のあるアニメーションの残り時間を持続時間の割合として取得します。 |