敵AI 9:AIが敵と味方を区別して戦うようになるチームバトル

AIが敵と味方を区別して戦うようになります。


Ali Elzoheiry氏のチュートリアルから学ぶ敵AIの第9回になります。過去記事で作成したものが必須になります。
敵AI:敵がルートを巡回しプレイヤーや音に気付くと反応
敵AI 2:敵が間合いを取りながら攻撃してくる
敵AI 3:敵が逃げて隠れて再び攻撃してくる
敵AI 4:近距離タイプと遠距離タイプの敵を分ける
汎用性と拡張性の高いダメージシステム
敵AI 5:敵の攻撃とブロック
敵AI 6:プレイヤーを見失った敵が捜索を始める
敵AI 7:NavLinkProxyで敵にジャンプさせる 
敵AI 8:集団の敵の攻撃タイミングの管理

記事は自分でやり直す時のために簡単にまとめており、独自の仕様にもなっていますから、学習するなら参考元のAli Elzoheiry氏のSmart Enemy AI Tutorial Seriesの動画を視聴してください。
Smart Enemy AI | (Part 12: Team Combat System) | Tutorial in Unreal Engine 5 (UE5) | Youtube

BPインターフェース: BPI_Damageable

関数: GetTeamNumber

アウトプット
TeamNumber – Integer

プレイヤーBP: BP_Player

インターフェース: Get Team Number
ノードを組む

【変数】TeamNumber – Integer ※デフォルト値1
新規作成。

敵BP: BP_EnemyBase

インターフェース: Get Team Number
ノードを組む

【変数】TeamNumber – Integer ※デフォルト値2
新規作成。目玉アイコンを開ける。「スポーン時に公開」にチェックを入れる。

AIコントローラー: AIC_EnemyBase

関数:OnSameTeam

新規作成。

インプット
OtherActor – Actor

アウトプット
SameTeam – Boolean

ノードを組む
関数: HandleSensedSight
ノードを編集
関数: HandleSensedDamage
ノードを編集

BPC_Attacks

関数: DamageAllNonTeamMembers

インプット
Hits – Hit Result配列
※記載していないインプットは他のノードから線を伸ばして持ってくる

アウトプット
ActorsDamaged – Actor配列
※記載していないアウトプットは他のノードから線を伸ばして持ってくる

ローカル変数
ActorsDamageSoFar – Actor配列

ノードを組む

敵BP: BP_EnemyBase

近接攻撃でTraceを使っている場合、敵と味方の区別をつけるためにトレースを「Multi…」に置き換えます。今までがSphere Trace For ObjectsならMulti Sphere Trace For Objectsへ。

ノードを編集
同じチームの敵がプレイヤーを敵だと誤認させないための処理。
ノードを編集
タグによる判別は不要

私は敵の攻撃時にActor Has Tagを使って、Playerというタグがあるアクターのみを攻撃可能にしていましたが、チーム分けシステムによって不要になりました。

コメント

  1. Excellent write-up

タイトルとURLをコピーしました