ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE4・UE5】AIが移動前に目的地に到達可能かを判定してみた

はじめに

f:id:namiton:20220124111543g:plain

UE4やUE5にはAIMoveToなどでAIを移動されることができます。
しかし、AIが移動を開始する前に到達可能かどうかを判定する方法が探しても分からなかったので備忘録としてまとめることにしました。
他にもっと効率の良いやり方などございましたらコメントで教えていただけると幸いです。

f:id:namiton:20220124111509p:plain

▲AIMoveTo(BTタスク内)移動を終了してから到達したかのチェックが返ってくる。

やりかた

はじめはチェック用のAIを先行で走らせて到着できるかを判定する予定でしたが、

あまりにも頭が悪い考えなのでFindPathtoLocationSynchronouslyというノードを利用してやってみました。
このノードはPathStartとPathEndで指定した座標間のナビメッシュ上にパスを生成し、配列PathPointsを返します。

f:id:namiton:20220124111708p:plain

つまり、最後に生成したPathPointと目的地との差が一定以下なら到着できるという判定になります。

それを利用して以下のノードを組みました。

f:id:namiton:20220124111728p:plain

結果が以下です。

f:id:namiton:20220124111815p:plain

f:id:namiton:20220124111838p:plain

f:id:namiton:20220124111902p:plain

しっかり移動ができるかどうかをチェックできてます。
デバックで出しているオレンジ色のアイコンと矢印の位置との距離を計算しています。
LineTraceなどとうまく組み合わせればAIMoveToではない移動(AddMoveInput)などで移動させた場合でもナビメッシュ外に行かないように制御できると思うのでいろいろ応用してみてください。

おまけ

ビヘイビアツリーでも使えるようにタスクにしたものを貼っておきます。

f:id:namiton:20220124112057p:plain

▼コピペはこちらからどうぞ

blueprintue.com

f:id:namiton:20220124112116p:plain

f:id:namiton:20220124112130g:plain

しっかり次のポイントに行けない場合は移動する前に処理が止まっているのがわかります。


さいごに

また今回AIの移動に関しては以下の記事を参考にしました。
とてもよい記事なのでぜひ見に行ってみてください。

 

qiita.com

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。