【UE4】ビヘイビアツリーによる敵戦闘AIの実装

戦闘時の敵AIをビヘイビアツリーで実装したので、大まかにツリーの内容を解説してみたいと思います。
※画像はクリックで拡大できます
戦闘時の敵動作に関して
twitterに戦闘中の動画を投稿したので、参考に張っておきます。
ビヘイビアツリーで敵の戦闘AIを実装したので、敵と戦えるようになりました!お化けのキャラがCPUとなっておりまする。 #UE4 #UE4Study pic.twitter.com/1RbqJslUST
— ossan (@binto_red) 2019年2月16日
戦闘中の敵の動作は、待機、前進、後方回避、攻撃の4種類の動作から構成されるシンプルな物となっています。
これらの動作をビヘイビアツリーで組んだ場合、どういった形になるのか見て行きます。
戦闘時の敵AIのビヘイビアツリー
ビヘイビアツリーやブラックボードの作成や解説、使用方法に関しては、以前の記事で紹介しております。
戦闘中敵キャラのビヘイビアツリーは次のようになっています。

このビヘイビアツリーについて解説していきたいと思います。
戦闘時ビヘイビアツリーの用途と動作について
戦闘時、敵キャラクターの移動や攻撃のアニメーションといった実際の動作はキャラクタークラスやアニメーションクラスのブループリントに実装しています。
敵キャラクターには状態を管理するBattleEnemyStateという列挙型の変数を持たせており、BattleEnemyState変数が「移動」や「攻撃」といった値になった時、その状態に見合ったアクションを行うよう実装されています。
今回、ビヘイビアツリーの用途は敵キャラクターの状態遷移のみを取り扱うように実装しました。
「サービス」、「デコレーター」、「タスク」からなるこのビヘイビアツリーの大まかなな機能分類は下記画像のようになっています。

サービスで条件判定の準備、デコレーターで条件判定、タスクで処理、といったように明確な役割が見えてきます。
実際の処理の流れでは、次の画像のような動きをしています。

「Selector」は失敗したら別の処理を継続、成功したら処理を終了する動作をします。
そのため、通常攻撃を行えない状態であれば、後ろ回避の処理をチェックしにいきます。
「Sequence」はSelectorの逆で、成功したら別の処理を継続し、失敗したら処理を終了する動作をします。
「Selector」と「Sequence」を状況に応じて使い分ける事で、処理の流れを上手くコントロールする事ができます。
デコレーターの内容について解説
通常攻撃、後ろ回避の実行成否判断を行っている各デコレーターについて大まかに解説します。
各デコレーターの内容は次の画像の通りです。

「Blackboard Based Condition」以外のデコレーターは全て自前で作成したデコレーターになります。
作成したデコレーターは「Perfom Condition Check」をオーバーライドしており、内部で処理した結果をBoolのTrueかFalseで返すようになっています。
今回は戦闘のAIを作成しましたが、自分で好みのデコレーターやタスクを作成して条件判断や処理を行っていく事で、ビヘイビアツリーによる色々な用途のAIを作成できるんじゃないかなぁと思っております。
ディスカッション
コメント一覧
まだ、コメントがありません