UnrealEngineで、NPCの行動AIを作って制御したい時に使えるのがStateTree(とBehaviorTree)である。
例を挙げるなら、リオレウスがハンターの位置を見ながら炎を吐いたり、しっぽを振りまわしたり、飛行状態に移ったりという制御が作れる。もっともモンハンはUEを使用してはいないのだが。
公式によると
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/state-tree-in-unreal-engine
StateTree は、動作ツリーの セレクター とステートマシンの ステート および 遷移 を組み合わせた汎用の階層型ステートマシンです。
と書かれているが、これでどういうものかピンとくる人ばかりではないだろう。少なくとも筆者にはわからなかった。なぜならこの文章はステートマシン(有限オートマトン)の知識を前提としている文章だからだ。
そういわれると余計分からなくなるかもしれない。知らない横文字の登場は思考を停止させる。ので。
https://www2.denshi.numazu-ct.ac.jp/lego/NXT/nxtOSEK/3_jissen/state_machine.html
どこぞの大学の講義資料から持ってきた。基本的にステートマシンは◇と→で書ける。
- 複数の状態を定義する。
リオレウスなら、立ち、ブレス、突進、しっぽ攻撃、飛行などと言った感じだろう。 - 状態の間に矢印がある。
例えば立ち状態から突進をする。矢印でつながっていない行動(状態)はその時点では使えない。 - 条件に応じて矢印を選んで動く。(ただし、完全ランダムも可)
遠くにいるときはブレス攻撃や突進攻撃で距離を詰めるし、横に陣取られているときはしっぽ攻撃を優先する。
リオレウスを全世界の人が知っている前提で例を書いたが、ステートだの遷移だのよりは分かりやすいだろう。
次回からは筆者が実際に勉強した内容を報告する形で書いていく。