UE4ゲーム制作入門九日目

一人UE4ゲーム制作入門アドベントカレンダー九日目です。

今日はAIを作ります。せっかくプレイヤーの死亡アニメーションを作ったのに自殺しかできないのは哀しいですからね。

クマAI作成開始


まずはAIを作るために必要なビヘイビアツリーを用意します。

ビヘイビアツリーは、タスクを組み合わせて、実際のAIの処理を実装するものです。

名前はBT_Bearです。

ビヘイビアツリー作成

今の動きを移植してみる


まずは自分に向かってくる敵を作ってみましょう。まずはBT_Bearを開きます。

①開いたら、ブラックボートを作ります。

ブラックボードは、タスク間、もしくは同じブラックボードを持っているアクター間で同じ変数を共有するためのものです。

名前はBB_Bearです。

②ビヘイビアツリーに戻って、先程のブラックボードをセットします。

セットできたら、ROOTの下側部分の濃い黒い部分からドラッグをします。するとコンポジットを選ぶことができます。

コンポジットは、タスクの流れを制御するためのノードです。

今回はSequenceを選びましょう。

③プレイヤーに向かって移動するという命令を作ります。NewTaskから新しくタスクを作ります。

すると、作られたタスクのウィンドウが自動で開くので、中身を実装・・・する前に、名前をコンテンツブラウザから変更します。

BTask_MoveToPlayerという名前にしましょう。

ビヘイビアツリーの中身

改めて、タスクの中身を実装していきます。まず、Event Receive ExecuteAIを配置します。このノードはこのタスクがAIで使われている際のスタートポイントになります。

次に変数を作りましょう。名前はTargetです。

型はBlackboadKeySelectorというブラックボードの変数を参照することのできる変数です。Publicにしておくことで、ビヘイビアツリー上で使用するブラックボードの変数をBlackboadKeySelectorに割り当てることができます。

使用方法は赤丸で囲ってあるとおり、getして、ノードを伸ばすとGet(Set)Blackboad value * みたいなノードがいっぱい出てくると思います。今回はActorの情報を参照したいのでGet Blackboad Value as Actor を呼び出します。

SimpleMoveToActorで移動させ、FinishExecuteをtrueで返して終わります。Trueを返さない場合、AIがうまく動かずに止まります。

実はすでに用意されているタスクのMoveToでもよかったりします。

タスクの中身

ブラックボードに変数を設定しましょう。NewKeyからObject型の変数を作ります。名前はTargetです。

その次に、右側の詳細画面でKeyTypeが小さくなっているのですべて開きます。するとBaseClassを選べるので、Actorを選びます。

Blackboadの中身

あとはAIコントローラでビヘイビアツリーとブラックボードを走らせれば、AIが動きます。

その際、もともとテスト用に使っていたMoveToActorはTickから外します。この画像では残っていますが、消しても全然構いません。

AIコントローラ

やってみた


うまく動かない場合はNavMeshVolumeがうまく動いてない可能性があります。きちんとステージ全体が範囲内に入っているか、Pボタンをエディタ上で押して緑色になるかどうかを確認し、ビルドを通して再度Pボタンを押して確認してみてください。

明日はこのAIをよりゲーム向きに改良します。