集団で襲ってくる敵が攻撃してくるタイミングを制限します。
プレイヤーがトークンを持ち、敵が攻撃前にそのトークンを受け取って攻撃し、攻撃後にトークンを返すシステムです。プレイヤーのトークンが1なら、1体の敵しか攻撃できないという仕組み。
Ali Elzoheiry氏のチュートリアルから学ぶ敵AIの第8回になります。過去記事で作成したものが必須になります。
敵AI:敵がルートを巡回しプレイヤーや音に気付くと反応
敵AI 2:敵が間合いを取りながら攻撃してくる
敵AI 3:敵が逃げて隠れて再び攻撃してくる
敵AI 4:近距離タイプと遠距離タイプの敵を分ける
汎用性と拡張性の高いダメージシステム
敵AI 5:敵の攻撃とブロック
敵AI 6:プレイヤーを見失った敵が捜索を始める
敵AI 7:NavLinkProxyで敵にジャンプさせる
記事は自分でやり直す時のために簡単にまとめており、独自の仕様にもなっていますから、学習するなら参考元のAli Elzoheiry氏のSmart Enemy AI Tutorial Seriesの動画を視聴してください。
BPインターフェース: BPI_Damageable
関数: ReserveAttackToken
インプット
Amount – Integer
アウトプット
Success – Boolean
関数: ReturnAttackToken
インプット
Amount – Integer
BPC_DamageSystem
変数の追加
AttackTokenCount – Integer ※デフォルト値1
関数: ReserveAttackToken
敵キャラクターが攻撃前にトークンを受け取る処理。
インプット
Amount – Integer
アウトプット
Success – Boolean
関数: ReturnAttackToken
敵キャラクターが攻撃後にトークンを返す処理。
インプット
Amount – Integer
BPインターフェース: BPI_EnemyAI
関数: AttackStart
インプット
AttackTarget – Actor
TokensNeeded – Integer
アウトプット
Success – Boolean
関数: AttackEnd
インプット
AttackTarget – Actor
関数: StoreAttackTokens
インプット
AttackTarget – Actor
Amount – Integer
プレイヤーBP: BP_Player
インターフェース: Reserve Attack Token
イベントグラフ
コンストラクションスクリプト
敵BP: BP_EnemyBase
インターフェース: Reserve Attack Token
イベントグラフ
インターフェース: Attack Start
タスク: BTTask_MeleeAttack
名前: BTTask_MeleeAttack
新規作成。
【変数】AttackTargeKey – Blackboard Key Selector
新規作成。目玉アイコンを開ける。
【変数】AttackRadiusKey – Blackboard Key Selector
新規作成。目玉アイコンを開ける。
【変数】TokensNeeded – Integer
新規作成。目玉アイコンを開ける。
ビヘイビアツリー: BT_EnemyMelee
タスク: BTTask_RangedAttack
名前: BTTask_RangedAttack
新規作成。
【変数】AttackTargeKey – Blackboard Key Selector
新規作成。目玉アイコンを開ける。
【変数】TokensNeeded – Integer
新規作成。目玉アイコンを開ける。
ビヘイビアツリー: BT_EnemyRanged
・BTTask_DefaultAttackの削除。
・EvadeAndAttackをEvadeに名前変更。
・Evadeの上にSelectorを追加し、BTD_CanSeeTargetを移動させる。
・追加したSelectorから左に線を伸ばしてSequenceを追加し、名前をAttackにする。
・Attackの下にBTTask_RangedAttackを追加。Attack Target KeyはAttackTarget、Tokens Neededは1。Cooldownも追加して2秒に設定。
・その右にWaitを配置。
AIコントローラー: AIC_EnemyBase
親クラスを変更
クラス設定 > クラスオプション > 親クラスをAIControllerからDetourCrowdAIControllerに変更します。この変更だけで敵同士が衝突を避けるようになる。
コメント