UE4 覚え書き キャラクターのAIを作成する
モブくまキャラクターにAIを搭載して、自くまキャラを追いかけてくるBPを作りました。
登場するピンクのモブくまは最大で300匹!1秒毎にスポーンされるようにしています(笑)最初はレベル内を適当に歩き回っていますが、自分のキャラを発見すると追いかけてくるというAIになっています。発見してすぐはガンガン追っかけてきますが、数秒経つと途中で追うのを諦めるような仕組みにしてます。(そうしないと凄く機械的な感じになってしまうのでバラツキがでるようにしています。)
下準備
①AIを設定するキャラクターを作成する。
ブループリントクラス(親クラス=キャラクター)を新規作成して、メッシュのコンポーネントの詳細設定の「Mesh」にAIを設定したいキャラクター(今回はしろくま)のスケルタルメッシュを設定、「Animation」の「Anim Class」の欄は「Mesh」で設定したキャラクター用のアニメーションBPを設定する。
②AI Controllerのブループリントクラスを作成する。
ブループリントクラス(検索からAI Controller)を新規作成。
作成後、①で作成したAIキャラクター用BPを開き「クラスのデフォルト」ボタン(プレイやコンパイルボタンの並び)を押すと詳細の設定画面が出てくるので、その中の「AI Controller Class」の項目を②の初めで作成したAI ControllerのBPに変更しておく。
③ビヘイビアツリーを作成する。
新規追加からAI→ビヘイビアツリーでビヘイビアツリーを作成する。
②で作成したAI Controllerのイベントグラフを開いてビヘイビアツリー実行用のノードRun Behavior Treeを追加する。
「BTAsset」の項目を③の初めで作ったビヘイビアツリーにしておく。
ビヘイビアツリーの主な役割はキャラクターが行動する上での判断分岐を司る部分のようです。
④ブラックボードを作成する。
新規追加からAI→ブラックボードでブラックボードを作成する。
「新規キー」からベクター形式のキーを作成する。今回は「Move Location」という名前で作成。(ここにAIが移動したい位置の情報が納められる)
③で作成したビヘイビアツリーを開いて、「Blackboard Asset」の項目を作成したブラックボードに変更しておく。
ブラックボードの主な役割はAIに必要な情報(モブくまの移動目的座標、自くまキャラの位置座標など)を保管するためのもののようです。
実際に動作するAIを作っていく
⑤ビヘイビアツリータスクの作成
ビヘイビアツリーを開き、メニューの中から「新規タスク」をクリックする。するとコンテンツブラウザ内に新しいブループリントクラスが作成されるのでそれを開く。
モブくまがレベル内のどこに向かって歩いていくかをランダムで決定するブループリントを設定する。
⑥ビヘイビアツリーの作成
基本はブラックボードがROOTとなりそこから矢印が伸び、分岐してモブくまの行動が変化していくようになる。
ビヘイビアツリーの行動の流れは常に上から下へ、行動の分岐は左から右へと行われる。(ノードの右上に〇で囲まれた数字が行動が実行される順番)
※タスク処理、デコレーターに関しては今回は割愛して別途まとめ&研究したいと思います。
⓻モブくまの行動可能範囲を設定する
「モード」の「ボリューム」から「Nav Mesh Bounds Volume」を選んでレベル内に配置する。このボリューム内に収まっている範囲がモブくまの移動可能な範囲になるので、大きさ、位置などを調整して配置する。
配置するとモブくまが歩行移動可能な地面が緑色になるのですが、自動的に歩く場所を検出してくれるので凄く優秀!道が細すぎると歩行可能と認識されないようですが、これは凄く便利な機能ですね。
⑧モブくまが自くまキャラを捜索するようにする
②で作成したAI Controllerを開き、ビューポート内で「コンポーネントを追加」から「Pawn Sensing」コンポーネントを追加する。
このコンポーネントは他のキャラクターが視界に入ったか、物音がしているかを判定するもので、視界の範囲の設定なども可能。
⑨自くまキャラを発見した際のBPの処理を作成
まず、ブラックボードに自くまキャラを発見した際の情報を格納しておくキーを作成しておく。今回は「Player」というキーを「Object型」で作成。
次に追加した「Pawn Sensing」コンポーネントを右クリックして、「Add Event」から「On See Pawn」イベントを追加する。
On See Pawnイベントはモブくまが自くまキャラを発見した際にイベントが発生する。発見すると、自くまキャラの情報をBBの[Player]キーに書き込むような仕組み。[Player]に自キャラ情報が書き込まれると、ビヘイビアツリーでMove To Playerの処理が行われるようになる。
また、モブくまたちの動きに不規則さを持たせるために、発見して6秒追いかけてきた後に追うのを諦める(正確には見失うですが)処理も入れてます。ここの処理ではBBの[Player]にnullを入れる事で自くまキャラを追いかけなくなるようにしています。
以上、少し端折ってるところもありますが、AIに関しては細かく書き出すとキリがないような気がするのでとりあえずここまで・・。