敵AI 11:敵のジャンプ攻撃

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

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

必要なもの

敵のABP: ABP_EnemyBase

BP_EnemyBaseが使用しているアニメーションブループリントを編集します。もしABP_Mannyを使っていればABP_Manny。

AnimGraph
ノードを組む
・上半身と下半身でアニメーションをブレンドする設定。

MainStates(Pose)新規保存のキャッシュされたポーズ…で出るノードです。
・スロットは詳細からUpperBodyに変更できます。
・Velociyから繋がっているのは「!=」です。
ボーン毎のレイヤードブレンドの詳細のBone Nameはspine_01。Blend Depthは1。Mesh Space Rotation Blendのチェックを入れる。

敵のジャンプ斬りのアニメーション

Force Root Lockにチェックを入れる。

AnimMontageを作成。
Start Timeを0.45にする。

地面から足が離れたタイミングでMontage Notifyを追加。名前はJump。

着地寸前の斬るタイミングでMontage Notifyを追加。名前はSlash。

スロットをDefaultSlotからUpperBodyに変更。
私の場合はANS_SwordTraceLoop_Enemyも配置しています。

敵のBP: BP_EnemyMelee

アニメーションブループリントをABP_EnemyMeleeにしていたかもしれませんが、ABP_EnemyBaseにします。

関数: Calculate Future Actor Location

新規作成。
プレイヤーの動きに合わせてジャンプ斬りの着地点を調整する計算です。

インプット
Actor – Actor
Time – Float ※デフォルト値1

アウトプット
Location – Vector

ノードを組む
関数: Get Ideal Range

AttackRadiusを200、DefendRadiusを400。
※変数化している場合はデフォルト値に入力。

イベントグラフ
ノードを組む JumpToAttackTarget

【JumpToAttackTarget: インプット】AttackTarget – Actor
・ジャンプ力と着地点は要調整。

今まで攻撃をBP_EnamyBaseと共有していましたが、攻撃が複雑化するのでBP_EnamyMelee独自のものに変更します。

ノードを組む ShortRangeAttack

【ShortRangeAttack: インプット】AttackTarget – Actor
親: Enemy Attackのノードは、イベント Enemy Attackを配置してから右クリックで「親関数への呼び出しを追加」で出せます。
ノードを組む LongRangeAttack

【LongRangeAttack: インプット】AttackTarget – Actor

列挙型: E_Melee_Attacks

BP: ブループリント > 列挙型
名前: E_Melee_Attacks
新規作成
エニュミレーター
Default
ShortRangeAttack
LongRangeAttack

ブラックボード: BB_EnemyBase

新規キー
DistanceToAttackTarget – Float

タスク: BTTask_MeleeAttack

ノードの編集
・作成済のタスクです。Enemy AttackとCast To BP_EnemyBaseを削除して編集。

【変数】AttackName – E_Melee_Attacks
新規作成。目玉アイコンを開ける。

サービス: BTS_UpdateDistanceToTarget

BP: サービス
名前: BTS_UpdateDistanceToTarget
新規作成。
ノードを組む

【変数】AttackTargetKey – Blackboard Key Selector
新規作成。目玉アイコンを開ける。
【変数】DistanceToTargetKey – Blackboard Key Selector
新規作成。目玉アイコンを開ける。

ビヘイビアツリー: BT_EnemyMelee

BT_EnemyMeleeを複製して名前をBT_EnemyMeleeAndJumpにしました。

ビヘイビアツリーを編集

■CombatReady(Selector)
BTS_UpdateDistanceToTargetのAttack Target KeyをAttackTarget、Distance to Target KeyをDistanceToAttackTarget、Intervalを0.1、Random Deviationを0、Call Tick on Search Startにチェックを入れる。
■Attack(Sequence)
Cooldownのオブザーバーを中止はNone。
Blackboard Based Condition(左)のBlackboard KeyをDistanceToAttackTarget、Key QueryをIs Greater Than Or Equal To、Key Valueを400。
LongRangeAttack(BTTask_MeleeAttack)のAttack Radius KeyをDefendRadius、Attack NameをLongRangeAttack。
ShortRangeAttack(BTTask_MeleeAttack)のAttack NameをShortRangeAttack。
BP_EnemyMeleeのBehavior TreeにBT_EnemyMeleeAndJumpをセット。

コメント

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