関連ブログ
- [UE5] 元の位置に戻るカメラの実装 2024.12.18UE
- [UE5]難易度変更に対応したシューティングゲームを作ってみよう 2024.12.11UE
- [UE5] インタラクト可能なモノの量産に役立つBPを作ってみよう 2024.12.04UE
CATEGORY
2023.05.24UE5UE/ Blueprint
執筆バージョン: Unreal Engine 5.1
|
今回は、StateTreeについてです。
StateTreeとは、UE5で追加された状態管理をするステートマシンです。 AIやゲームプレイの状態管理に使えます。
ビヘイビアツリーと同様に、ツリー構造の階層を持った状態管理ができます。
UE5.0ではExperimentalでしたが、UE5.1ではプロダクション対応になったようです。
入力条件や遷移条件にプロパティ参照する機能がStateTreeにはあります。
① スキーマ(Schema)・コンテキスト(Context)
追加したいアクターのクラスを明示的に指定することにより、
StateTreeの入力条件や遷移条件に指定したクラスが持つプロパティを指定することができます。
② パラメータ (Parameters)
StateTree内でパラメータを管理したい場合はこちらで指定できます。 また、StateTreeコンポーネントの詳細からデフォルト値を設定することが可能になります。
③ エバリュエーター (Evaluators)
StateTreeコンポーネントから直接StateTree側へパラメータを渡すことができないため、
エバリュエーターを使用することにより、コンテキスト・StateTreeのパラメータ以外でデータを StateTreeで使用できるようになります。
UStateTreeEvaluatorBlueprintBaseクラスからブループリントを作成することにより使用することができます。 バリュエーターは以下の機能を持ちます。
ステートを選択できるかどうかを決定する条件を設定します。
① 判定結果の反転(Invert)
② 比較方法(Operator)
③ 左辺値(Left)
「Bind」のリストボックスをクリックすると「StateTreeのデータのやり取り方法」で設定したオブジェクトやプロパティを選択し、参照することができます。
④ 右辺値(Right)
固定値を利用できますが、左辺値同様、Bindから参照するオブジェクト・プロパティを選択することができます。
デフォルトで用意されている入力条件の他にカスタム入力条件を追加することができます。
UStateTreeConditionBlueprintBaseクラスからブループリントを作成することにより、独自の入力条件を追加することが可能です。
ステートがアクティブ状態になった場合、実行される処理のひとまとまりになります。
タスクが完了するまで処理が実行され続けます。
タスクが完了した場合、Endイベントが呼ばれステートの遷移の判定が行われます。
条件に当てはまる遷移が無ければ次のステートに進みます。
UStateTreeTaskBlueprintBaseからブループリントを作成することができます。
各処理の実装
タスクの開始、終了、毎フレーム処理は以下の関数をOverrideして追加してください
パラメータを編集可能にする
プロパティの「Instance Editable」にチェックを入れると StateTreeのエディタ画面から設定できるようになります。
現状のステートから別のステートに遷移条件・遷移先を設定します。
遷移・トリガー条件を満たした場合やタスクが完了した後に遷移するステートを指定します。
主に以下のようなステートへ遷移先を指定することができます。
ステート入力条件と同様に遷移条件を指定することができます。
また、Taskのプロパティを条件のパラメータに使用することができます。
StateTreeとビヘイビアツリーは異なるものなので、ビヘイビアツリーで作ったAIをそのまま移植することはできないのですが、
StateTreeのほうが、ステートマシンの実装に慣れている場合使いやすいとは思います。
個人的にはAI以外にもゲームプレイの状態管理(画面遷移等)にも利用しやすい機能だと思います。