目次
はじめに
注意
UE5.0.3の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
前回
確立によるランダム行動は以前実装しましたが、一定のルートを巡回する実装は行っていないのでここで紹介します。

こんな感じで一定の巡回ポイントを移動します。

解説
①BP_NPC_Characterに変数の追加
BP_NPC_Characterを開いて巡回地点を登録するためのアクタ型の配列PatrolPointActorsを作成します。

また、現在の巡回ポイントを保持するためのInt型の変数PatrolIndexも作成します。

巡回を行うかの変数DoPatrolを追加しましょう。

②関数の作成
まず現在の移動ポイント取得する関数GetPatrolLocationを作ります。
配列からIndex番のアクタを取得してワールド位置をリターンします。
何らかの原因で配列に存在しない場合はエラーログを出力して自身のアクタの位置を返すようにします。

次の巡回ポイントを指定するためにIndex番号を進める関数AddPatrolIndexを作ります。
余りを使うことで配列の長さ内で値が回るようにします。

③ブラックボードに変数を追加
BB_NPCを開き、巡回を行うかのキーDoPatrolKeyを追加しました。

④タスクの作成と編集
ビヘイビアツリーの新規タスクからBTT_SetPatrolLocationを作ります。

ここでは作成した関数を使って位置をセットするタスクです。

もう一つBTT_AddPatrolIndexも作りましょう。

Indexを進める関数を呼び出します。

⑤サービスの実装
新規サービスからBTS_GetAIStateというNPCの情報を取得するサービスを作ります。

初回に一度呼ばれるRceiveActivationAIを使用します。
NPCCharacterが持つ巡回を行うかの判定をブラックボード登録します。

⑥ビヘイビアツリーへ実装
ルートの次のセレクターにサービスを実装します。

確率行動決定の前にセレクターを挟みます。

Sequenceノードにデコレーターのブラックボードを追加して、DoPatrolKeyがFalseならオブザーバーを中止するようにします。

内容は確率行動決定とほぼ一緒です。
LocationKeyへの登録を作成したタスクに移動しただけです。
確率行動決定と共通点が多いのですが、確率行動決定は移動しない行動もできるのであえて分離しています。

⑦BP_AIPatrolPointBaseの作成と配置
あとは巡回ポイントを指定するだけです。
配置するものはアクタなら何でもいいのですが1から作るのも大変なのでBP_AIActionPointBaseを複製してBP_AIPatrolPointBaseにしました。

マップに巡回するポイントを配置します。

⑧BP_AIPatrolPointBaseの登録
最後にBP_NPC_Characterの詳細から巡回地点を登録して完了です。

完成!

最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。
![]()