公開日:2024/04/21  更新日:2024/04/21

UE5の敵の移動方法

UE5で敵をどう移動させたらいいのかわからないという人も多いはず。

そこで今回はナビメッシュを使ってAIの敵をランダム移動させる方法を紹介していく。

敵の移動方法目次

ナビメッシュバウンズボリュームを設定
AIControllerを作成
ビヘイビアツリーとブラックボード
キャラ用意
タスクを記述
ビヘイビアツリーを記述
目次にもどる

ナビメッシュバウンズボリュームを設定

NavMeshを使ってAIの敵を移動させるには、まずナビメッシュバウンズボリュームを設定して、敵が動ける範囲を決める必要がある。

以下のマークを選択し、「ボリューム」→「ナビメッシュバウンズボリューム」のように選択しよう。

UE5の敵の移動実装

するとビューポートに以下のようなオレンジの線で囲まれた立方体が表示される。

UE5の敵の移動実装

これをステージの中央付近まで移動させよう。

UE5の敵の移動実装

ナビメッシュバウンズボリュームの詳細ビューの「ブラシセッティング」を確認しよう。

UE5の敵の移動実装

ここでオレンジの線で囲まれた立方体の大きさを変更可能。以下のようにステージを覆う程度にサイズを調整しよう(Third Person Mapのプロジェクトの最初からあるステージであればだいたいX:4000、Y:4000、Z:500程度にすれば、ちょうどよく覆うことができる。)。

UE5の敵の移動実装

ビューポートを選択した状態でPキーを押すと以下のように表示が以下のように切り替わる。

UE5の敵の移動実装

緑色でAIの敵が移動できる範囲が表示される。もう一度Pキーを押せば通常の表示に戻る。

これで、ナビメッシュバウンズボリュームによる敵が動ける範囲の設定は完成だ。

目次にもどる

AIControllerを作成

敵の作成を行っていく。

まずはコンテンツブラウザの任意の場所で右クリック→「ブループリント」を選択しよう。

UE5の敵の移動実装

出た画面ですべてのクラスを選択すると、以下のように下に表示される。

UE5の敵の移動実装

ここでAIと検索すれば、「AIController」が出るので選んで、選択ボタンを押す。

今回はできたファイルについてBP_EnemyControllerと名前をつけた。

目次にもどる

ビヘイビアツリーとブラックボード

コンテンツブラウザの任意の場所で右クリック→「AI」→「ビヘイビアツリー」のように選択する。

UE5の敵の移動実装

作成されたビヘイビアツリーをBT_Enemyと名付けた。

同じくコンテンツブラウザで右クリック→「AI」→「ブラックボード」のように選択。

UE5の敵の移動実装

作成されたブラックボードをBB_Enemyという名前にした。

続いてBP_EnemyControllerを開き、イベントグラフタブを選択する。

UE5の敵の移動実装

以下のように、Event BeginPlayからワイヤーを伸ばし、「Run Behavior Tree」のノードを検索して作成する。

UE5の敵の移動実装

入力のBTAssetで「BT_Enemy」を指定する。横の虫めがねマークから「BT_Enemy」に飛べるので開く。

BT_Enemyを開くと以下の画面となるので、右側の詳細ビューのBehaviorTreeの項目を「BB_Enemy」にする(既にそうなっているかもしれない)。

UE5の敵の移動実装

これでビヘイビアツリーとブラックボードの紐づけが完了した。

目次にもどる

キャラ用意

AI用のキャラを用意する。

今回は説明のため、以下のEpic Games提供の無料アセットを使って説明していく。

Paragon: Kallari

以上のアセットをプロジェクトに追加後、コンテンツブラウザのParagonKallari→Characters→Heroes→KallariにあるKallariPlayerCharacterのファイルをコピーし、貼り付けて複製する。そのファイルをBP_Enemyと名付ける。

BP_Enemy、BP_EnemyController、BT_Enemy、BB_Enemyと必要なファイルが多いので「Enemy」などフォルダを作り、まとめておくのがおすすめ。

BP_Enemyを開きノードを全て削除する。

UE5の敵の移動実装

ここの処理はボタンを押した時の処理で操作キャラ用であり、今回は敵として利用するので必要ない。

操作キャラではないのでカメラも必要ない。コンポーネントビューをみて、カメラを全て削除しよう。

UE5の敵の移動実装

続いてコンポーネントビューの一番上のBP_Enemyを選択する。

UE5の敵の移動実装

この状態で右側の詳細ビューのポーンの項目(かなり下のほうにある)を確認する。

UE5の敵の移動実装

ポーンのAI Controller Classについて、先ほど作成した「BP_EnemyController」を検索して選択する。

これで、BP_EnemyとBP_EnemyControllerの紐づけが完了した。

BP_EnemyはコンテンツブラウザのParagonKallari→Characters→Heroes→KallariにあるKallari_AnimBlueprintのアニメーションブループリントを使用している。このファイルを開く。

問題になるのはキーを押した時の処理が行われている部分だ。先述したようにBP_Enemyは敵であり操作しない。例えば操作キャラのアニメーションブループリントであれば、移動のWASDキーが押されているかが再生するアニメーションの判断材料などになっていることも多い。Kallari_AnimBlueprintも元々は操作キャラ用に作られているが、これを敵用に変更する必要がある(そうしないと移動時に走るアニメーションが出ない)。

Kallari_AnimBlueprintの場合は変更箇所は2か所。

AnimGraph→Ground Locomotion→idleからJogStart(ルール)の、is AcceleratingからANDに伸びるワイヤーを外す。

UE5の敵の移動実装

AnimGraph→Ground Locomotion→RunからJogStop(ルール)の、is AcceleratingからNOTに伸びるワイヤーを外す。NOTからResultに伸びるワイヤーも外す。

UE5の敵の移動実装

今回のKallari_AnimBlueprintに関しては以下のような変更でOKだが、当然アニメーションブループリントによって構造が異なり、行うべき変更も異なる。だが、押されたキー入力を受け取る「Get Current Acceleration」があったら、そのノードが処理に関わらないようにワイヤーを外せばOKであることが多い。あるいは今回のようにIs AcceleratingのようなAccelerationと似た変数があった場合もそれでキー入力を判断している可能性が高く、そのノードが処理に関わらないようにワイヤーを外せばOKである場合が多い。

目次にもどる

タスクを記述

ビヘイビアツリーのBT_Enemyを開き、「新規タスク」を選択する。

UE5の敵の移動実装

BTTask_Randomと名付け保存する。すると以下のようにBTTask_Randomのイベントグラフが開いた状態になる。

UE5の敵の移動実装

左側の関数の項目のオーバーライドと書いている部分を選択すると以下のような選択肢が出る。

UE5の敵の移動実装

Receive Execute AIを選択する。

以下のようにReceive Execute AIのControlled Pawnからワイヤーを伸ばし、Get Actor Locationを検索して配置する。これで敵キャラの位置がわかる。

UE5の敵の移動実装

Get Actor LocationのReturn Valueからワイヤーを伸ばし、GetRundomReachablePointInRadiusのノードを検索して出し、以下のように配置する。Radiusの値を1000(1単位は1㎝)にする。Originの位置(つまり敵の位置)から1000cm(10m)以内のランダムな位置を取得することができる。

UE5の敵の移動実装

GetRundomReachablePointInRadiusのRandom Locationからワイヤーをだし、Set BlackBoard Value as Vectorを検索して出す。以下のようにReceive Execute AIからもワイヤーを伸ばしてつなぐ。更にKeyからワイヤーを伸ばし、Promote to variableを選択する。

UE5の敵の移動実装

画面左側に変数としてKeyが追加されているのが確認できる。以下のようにTargetLocationに名前を変更し、その右側のマークを選択することで目玉マークを出す。

UE5の敵の移動実装

TargetLocationにランダムな位置を代入できる。

Set BlackBoard Value as Vectorからワイヤーを伸ばし、Finish Executeを選択する。GetRundomReachablePointInRadiusのReturn Valueからワイヤーを伸ばし、Finish ExecuteのSuccessにつなげる。

UE5の敵の移動実装

タスクは最後にFinish Executeがないといけない決まりになっている。GetRundomReachablePointInRadiusのReturn Valueで位置取得できたことを確認して、それをSuccessに入力している。

最終的に以下のようになればタスクは完成である。コンパイルしよう。

UE5の敵の移動実装
目次にもどる

ビヘイビアツリーを記述

ビヘイビアツリーの画面に戻る。RootからワイヤーをだしSeqenceを出す。

UE5の敵の移動実装

Seqenceからワイヤーを出しタスクの項目にある先ほど作ったBTTask_Randomを選択して出す。

UE5の敵の移動実装

同じようにワイヤーを出し、Move toを出す。

UE5の敵の移動実装

画面右上のブラックボードを選択すると画面をBB_Enemyに切り替えることができる。

新規キーを選択し、Vectorを検索して選択する。Vectorkeyを作成することができる。名前をTargetLocationにする。

UE5の敵の移動実装

画面右上のビヘイビアツリーを選択することで、BT_Enemyの画面に戻れる。BTTask_Randomを選択し、右の詳細画面のデフォルトのTarget Location Keyの項目をTargetLocationにする。

UE5の敵の移動実装

Move toを選択し、右の詳細画面のブラックボードのBlackboard KeyをTargetLocationにする。

UE5の敵の移動実装

最終的に以下のようになる。Seqenceは左から順番に処理を行うので、最初にBTTask_Randomで敵の位置の周囲1000からランダムな位置を取得し、Move toでその位置に敵キャラを移動させる処理ができる。

UE5の敵の移動実装

ゲーム起動時、たぶんコンパイルエラーが以下のように出る。だが、操作キャラ用のブループリントであるKallariPlayerCharacterのエラーであり、使わないので問題はない。プレイインエディタを選択しそのままゲームを起動しよう。

UE5の敵の移動実装

敵キャラがランダム移動を行うのが確認できる。


UE5の基本まとめへ戻る

page top