ゲーム開発備忘録

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

【ゼロからアンリアルエンジン5】〔AI編〕⑰プレイヤーと間合いを取りながら移動する戦闘NPCを作ろう。前編

目次

 

はじめに

 

注意

UE5.0.3の現在の情報です。

今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。

前回

namiton.hatenablog.jp

 

今回の目的はNPCがプレイヤーを中心に前後左右に間合いを取る動きを作ります。

 

この記事では最小構成で検証し、動かし方を理解するのが目標です。

 

▼この記事でできること

 

解説

⓪実装説明

横移動などの特殊な移動はAIMoveToなどの仕組みでは綺麗に動かすことが難しく、体の向きや移動方向を制御しにくいです。そこでプレイヤーの入力と同じAddMovementInputから制御することでより自然な挙動を目指します。

 

①移動方向の列挙型を作成

移動方向を扱いやすくするために専用の列挙型を作成します。

 

名前をEN_StrafingDirectionとしました。

 

開いたら4方向の列挙子を作成します。

 

②Strafingタスクの作成

 

ビヘイビアツリーから管理しやすいようにタスクにします。

名前をBTT_Strafingとします。

 

③移動処理の確認

作成したタスクを編集します。

関数のオーバーライドからTickとExecuteをそれぞれ作成します。



移動を確認する最小構成を試してみましょう。

タスクが呼ばれてから5秒間(10,0,0)の方向に移動する構成です。

 

④ビヘイビアツリーに組み込み

確認だけなので、これまでのルックアット処理の最後に追加します。

 

⑤検証マップの作成

移動を確認するには今のレベルだと狭いので新規で作成します。

 

BasicでAIMoveTestLevelとしました。

 

PlayerStart、NavMeshBoundsVolume、BP_NPC_Character、BP_AIPatrolPointBaseを配置してBP_AIPatrolPointBaseはNPCに登録しておきましょう。

 

⑥実行と確認

実行してみましょう。

一定の距離近づくとプレイヤーと同じようにStrafing動作で移動することが確認できます。

ただし、ワールド座標の(10,0,0)へ移動しているのでプレイヤーがどこにいても関係ありません。

 

次回は作成した列挙型を使ってプレイヤの位置を基準とした移動を実装します。

 

最後に

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

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

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

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