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

UE5の追いかけてくる敵を作る方法

UE5のゲーム制作で主人公を追いかけてくる敵が必要になることは多い。

そこで視認範囲にプレイヤーが入ったら追いかけてくる敵を作る方法を紹介していく。

なお、以前に敵をランダム移動させる記事を作成している。今回の記事はそれをベースに説明しているので先に以下を確認してほしい。

敵の移動

UE5の追いかけてくる敵を作る方法目次

視認範囲設定
視認状況を確認する処理
追跡処理作成と切り替え設定
目次にもどる

視認範囲設定

まずは視認範囲設定を行っていく。

コンテンツブラウザからBP_EnemyControllerを開き、画面左上の「追加」を選択し、AI Perceptionを検索して選択する。

UE5の敵の追跡

AI Perceptionを選択する。

UE5の敵の追跡

その状態で画面右のAIパーセプションのSenses Configの項目の+ボタンを押す。

UE5の敵の追跡

出た項目の下矢印マークを押す。

UE5の敵の追跡

AI Sight Config(視認を制御ができる機能)を選択する。

UE5の敵の追跡

以下のように下矢印マークを押して開こう。

UE5の敵の追跡

重要な項目の説明は以下の通りだ。

Sight Radius

「この敵キャラ」から「この値の距離以内のもの」を視認する。今回は1000(つまり10m)に指定。

Lose Sight Radius

「この敵キャラ」から「この値の距離を超えたもの」を視認しなくなる(見失う)。今回は1500(つまり15m)に指定。

PeripheralVisionHalfAngleDegrees

片目の視野角の角度を示す。今回は75に指定。

Detection by Affiliation

Detection by Affiliation

配下に3項目あり、このキャラが味方か敵かで行動の切り分けが可能。C++じゃないと使えない。ブループリントを使う場合はひとまず3つともチェックをつけていこう。

目次にもどる

視認状況を確認する処理

BP_EnemyControllerでAI Perceptionを選択した状態でイベントの項目のOn Target Perception Update(何らかのターゲットを感知)の+マークを押してノードを追加する。

UE5の敵の追跡

以下のようにノードを配置する。

UE5の敵の追跡

注意点としてはSet Value as Objectについては、以下のように状況に合わせた表示のチェックを外さないと検索から出ない(それ以外の検索では役立つのでSet Value as Objectの検索時のみチェックを外すといい)。

UE5の敵の追跡

Set Value as ObjectについてはTargetとしてBlackboardを指定し、Make Literal NameでTargetPlayerを作成(後でブラックボードでTargetPlayerを作って使う)。

UE5の敵の追跡

どういう処理が行われているのか説明する。On Target Perception Updateはプレイヤーキャラ以外(同じ敵など)も認識してしまう。よってGet Player CharacterしてEqualでつなぎ、プレイヤーキャラを認識した場合のみBranchがTrueとなり後続の処理へ。

UE5の敵の追跡

Branchの後続には2つ目のBranchがある。

UE5の敵の追跡

「On Target Perception Update」→「Break AIStimulusのSuccessfully Sensed」により視認が成功したら「2つ目のBranchのCodition」へ入力されTrueが出力される。そうでないならfalseが出力される。

Trueだった場合は、「Set Value as Object」のノードでブラックボードのTargetPlayerにOn Target Perception Updateで視認したキャラ(つまりプレイヤーキャラ)の情報が代入される。falseだった場合は代入されない。

目次にもどる

追跡処理作成と切り替え設定

BT_Enemyを開き、右上のブラッグボードを選択してBB_Enemyを開き、新規キーを選択してObjectを選択する。

UE5の敵の追跡

追加されたObjectキーの名前をTargetPlayerにする(先ほどのBP_EnemyControllerでMake Literal Nameで入力したキー名)。

UE5の敵の追跡

Objectキーを選択した状態で画面右を見て、Key typeのBase ClassをActorにして保存する。

UE5の敵の追跡

画面右上のビヘイビアツリーを選択し、BT_Enemyの画面に戻る。

以下のようにROOTの次にSelector(後続の左の処理から実行し、処理できなかった場合は右の処理に移る)を設置し、配置を以下のように変更する。

UE5の敵の追跡

左にあるSequenceを選択し右クリックし、「デコレーターを追加」を選択し、Blackboardを選ぶ。

UE5の敵の追跡

すると以下のように「Blackboard Based Condition」が出るので選択する(ノードの中の上のBlackboard Based Conditionのみを選択する。間違いやすいので注意)。

UE5の敵の追跡

画面右をみて、ブラックボードのBlackboard Keyを「TargetPlayer」にし、ディスクリプションのNode Nameを「Find Target?」にする。

UE5の敵の追跡

以下のようになる。Find Target?処理でTargetPlayerに何か入っていれば下のSequence処理が実行されるようになる。

UE5の敵の追跡

以下のようにノードを追加する。

UE5の敵の追跡

move toのBlackboard KeyをTarget Playerに設定。WaitはWait timeを1秒に設定。つまり、プレイヤーの位置まで移動した後に1秒待機する追跡処理となる。

問題はプレイヤー追跡処理とランダム行動処理の切り換えの設定だ。

現状では例えばランダム行動処理中にプレイヤーを視認したとしてもプレイヤー追跡処理には移らない。ランダム行動処理が終了してRootから「Find Target?」まで来てようやく「TargetPlayer」に値が入っているかを判断するためだ。

瞬時に行動を変更するには、Find Target?を選択し、画面右のFlow Controlのオブサーバーを中止(Observer aborts)を変更する。

UE5の敵の追跡

ここは重要な設定で以下のような選択肢がある。

None

設定なし。デフォルトではNoneになっている。

Self

値がなくなったら、次の処理を実行する。

Lower Priority

値が入ったら、別の処理をしていても、この処理を実行する。

Both

SelfとLower Priorityの両方を兼ねた設定。

今回はObserver abortsをBothに設定する。プレイヤー追跡処理をしていても見失った(TargetPlayerの値がなくなった)らランダム移動処理に瞬時に切り替えてほしいし、ランダム移動処理でプレイヤーを視認した場合も瞬時にプレイヤー追跡処理に切り替えてほしいからだ。

ゲームを実行してみよう。ランダムに行動し、プレイヤーが視認範囲に入ったら追いかけてくる敵を作ることができた(見失うとランダム行動に戻る)。


UE5の基本まとめへ戻る

page top