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を選びます。
あとはAIコントローラでビヘイビアツリーとブラックボードを走らせれば、AIが動きます。
その際、もともとテスト用に使っていたMoveToActorはTickから外します。この画像では残っていますが、消しても全然構いません。
やってみた
— 故・白鳥隆士@一人UE4アドカレ (@shiratori1221) 2016年12月6日
うまく動かない場合はNavMeshVolumeがうまく動いてない可能性があります。きちんとステージ全体が範囲内に入っているか、Pボタンをエディタ上で押して緑色になるかどうかを確認し、ビルドを通して再度Pボタンを押して確認してみてください。
明日はこのAIをよりゲーム向きに改良します。