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

2019年3月3日

戦闘時の敵AIをビヘイビアツリーで実装したので、大まかにツリーの内容を解説してみたいと思います。

 

※画像はクリックで拡大できます

 

スポンサーリンク

戦闘時の敵動作に関して

 

twitterに戦闘中の動画を投稿したので、参考に張っておきます。

 

戦闘中の敵の動作は、待機、前進、後方回避、攻撃の4種類の動作から構成されるシンプルな物となっています。

これらの動作をビヘイビアツリーで組んだ場合、どういった形になるのか見て行きます。

 

戦闘時の敵AIのビヘイビアツリー

 

ビヘイビアツリーやブラックボードの作成や解説、使用方法に関しては、以前の記事で紹介しております。

ー UE4で敵キャラクターAIを制御する ー

戦闘中敵キャラのビヘイビアツリーは次のようになっています。

戦闘時の敵ビヘイビアツリーの様子

 

このビヘイビアツリーについて解説していきたいと思います。

 

戦闘時ビヘイビアツリーの用途と動作について

 

戦闘時、敵キャラクターの移動や攻撃のアニメーションといった実際の動作はキャラクタークラスやアニメーションクラスのブループリントに実装しています。

敵キャラクターには状態を管理するBattleEnemyStateという列挙型の変数を持たせており、BattleEnemyState変数が「移動」や「攻撃」といった値になった時、その状態に見合ったアクションを行うよう実装されています。

今回、ビヘイビアツリーの用途は敵キャラクターの状態遷移のみを取り扱うように実装しました。

「サービス」、「デコレーター」、「タスク」からなるこのビヘイビアツリーの大まかなな機能分類は下記画像のようになっています。

ビヘイビアツリーの「サービス」、「デコレーター」、「タスク」の用途

 

サービスで条件判定の準備、デコレーターで条件判定、タスクで処理、といったように明確な役割が見えてきます。

実際の処理の流れでは、次の画像のような動きをしています。

ビヘイビアツリーの処理内容

 

「Selector」は失敗したら別の処理を継続、成功したら処理を終了する動作をします。

そのため、通常攻撃を行えない状態であれば、後ろ回避の処理をチェックしにいきます。

「Sequence」はSelectorの逆で、成功したら別の処理を継続し、失敗したら処理を終了する動作をします。

「Selector」と「Sequence」を状況に応じて使い分ける事で、処理の流れを上手くコントロールする事ができます。

 

デコレーターの内容について解説

 

通常攻撃、後ろ回避の実行成否判断を行っている各デコレーターについて大まかに解説します。

各デコレーターの内容は次の画像の通りです。

デコレーターの各機能図

 

「Blackboard Based Condition」以外のデコレーターは全て自前で作成したデコレーターになります。

作成したデコレーターは「Perfom Condition Check」をオーバーライドしており、内部で処理した結果をBoolのTrueかFalseで返すようになっています。

今回は戦闘のAIを作成しましたが、自分で好みのデコレーターやタスクを作成して条件判断や処理を行っていく事で、ビヘイビアツリーによる色々な用途のAIを作成できるんじゃないかなぁと思っております。

スポンサーリンク