敵AI 14:新しい攻撃システム

攻撃システムが変更されます。プレイヤーや各エネミーで攻撃が共有しやすくなります。

Ali Elzoheiry氏のチュートリアルから学ぶ敵AIの第14回になります。過去記事で作成したものが必須になります。
敵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:中ボスクラスの魔術師
敵AI 11:敵のジャンプ攻撃
敵AI 12:敵の回転斬り
敵AI 13:魔術師の弾幕魔法

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

必要なもの

AnimMontage: Montage_Mage_GroundSmash

名前: Montage_Mage_GroundSmash
・グラウンドスマッシュ(魔法)のアニメーションからAnimMontageを作成。
0*(0.03)(1.12%)あたりにPlay Particle Effectを配置。右手用です。
P_Gideon_EmoteFX_HandsをセットしてSocket Nameをhand_rにする。
0*(0.03)(1.12%)あたりにPlay Particle Effectを配置。左手用です。
P_Gideon_EmoteFX_HandsをセットしてSocket Nameをhand_lにする。
41*(1.38)(46.47%)あたりにMontage Notifyを配置。Notify NameはSmash。
41*(1.38)(46.47%)あたりにPlay Particle Effectを配置。
Proto_P_Gideon_MeteorImpactをセットする。
必要に応じてPlay Soundも配置してください。

AnimMontage: Montage_Melee_GroundSmash

AnimMontage: Montage_Melee_GroundSmash
名前: Montage_Melee_GroundSmash
・グラウンドスマッシュ(剣)のアニメーションからAnimMontageを作成。

アセットブラウザからグラウンドスマッシュ(剣)のアニメーションを2つ追加して計3つにする。

1つめ
Start Time: 1.5
End Time: 2.0
Rate: 0.5

2つめ
Start Time: 2.0
End Time: 2.5
Play Rate: 2.0

3つめ
Start Time: 2.5

36*(1.23)(34.63%)あたりにMontage Notifyを配置。Notify NameはSmash。
36*(1.23)(34.63%)あたりにPlay Particle Effectを配置。
P_ky_lightning3をセット。位置Yを170にする。
必要に応じてPlay Soundも配置してください。

構造体: S_AttackInfo

ブループリント > 構造体
名前: S_AttackInfo
・新規作成。
AttackTarget – Actor
Montage – AnimMontage
DamageInfo – S_DamageInfo

列挙型: E_Mage_Attacks

・作成済。
エニュメレーター

Default
BasicAttack
BarrageAttack
GroundSmashAttack

列挙型: E_Melee_Attacks

・作成済。
エニュメレーター

Default
ShortRangeAttackAttack
LongRangeAttack
SpinningAttack
GroundSmashAttack

BPインターフェース: BPI_Damagable

・作成済
関数: SetIsInterruptible

新規作成。

【インプット】
Value – Boolean

敵キャラクターBP: BP_EnemyBase

ノードを組む

・インターフェースからノードを呼び出す。
イベント Enemy Attackは以前に設置したものです。
武器のトレースに使用しているDamage Infoを変数へ昇格。名前をWeaponTraceDamageInfoにします。

プレイヤーキャラクターBP: BP_Player

ノードを組む

・インターフェースからノードを呼び出す。

アクターコンポーネント: BPC_Attacks

・作成済
BP_EnemyMageとBP_EnemyMeleeから攻撃系のノードの移植をします。
関数: AttackBase
ノードを組む

【インプット】Attack Base
AttackTarget – Actor
関数: Calculate Future Actor Location
ノードを組む
BP_EnemyMeleeで使用している関数をコピー&ペーストするだけです

【インプット】Calculate Future Actor Location
Actor – Actor
Time – Float
【アウトプット】リターンノード
Location – Vector
イベントグラフ
ノードを組む
BP_EnemyMeleeのカスタムイベント AOE Slashをコピー&ペーストして編集します。

【インプット】AOEDamage
Radius – Float
セット RadiusのRadiusから線を伸ばす。
Damage Info – S_DamageInfo
Take DamageのDamage Infoから線を伸ばす。
ノードを組む
BP_EnemyMeleeのカスタムイベント ShortRangeAttackをコピー&ペーストして編集します。

【インプット】PrimaryMeleeAttack
AttackInfo – S_AttackInfo
Attack EndがターゲットはBPI_EnemyAIに置き換わっています。
ノードを組む
BP_EnemyMeleeのカスタムイベント JumpToAttackTargetをコピー&ペーストして編集します。
ノードを組む
BP_EnemyMeleeのカスタムイベント LongRangeAttackをコピー&ペーストして編集します。

【インプット】LongRangeMeleeAttack
AttackInfo – S_AttackInfo
ノードを組む
BP_EnemyMeleeのカスタムイベント SpinningAttackをコピー&ペーストして編集します。

【インプット】SpinningMeleeAttack
AttackInfo – S_AttackInfo
ノードを組む
BP_EnemyMageのイベント EnamyAttack(もしくはカスタムイベント BasicAttack)をコピー&ペーストして編集します。

【インプット】BasicMagicSpell
AttackInfo – S_AttackInfo
ノードを組む
BP_EnemyMageのカスタムイベント BarrageAttackをコピー&ペーストして編集します。

【インプット】BarrageMagicSpell
AttackInfo – S_AttackInfo

敵キャラクターBP: BP_EnemyMage

イベント Enemy Attackを削除。

ノードを組む

【インプット】GroundSmashAttack
AttackTarget – Actor
【インプット】BasicAttack
AttackTarget – Actor
【インプット】BarrageAttack
AttackTarget – Actor

敵キャラクターBP: BP_EnemyMelee

イベント Enemy Attackを削除。
カスタムイベント JumpToAttackTarget
SpinMeshStopSpinningChaseAttackTargetAOESlashを削除。
関数のCalculate Future Actor Locationを削除

ノードを組む

【インプット】GroundSmashAttack
AttackTarget – Actor
ノードを組む

【インプット】ShortRangeAttack
AttackTarget – Actor
ノードを組む

【インプット】LongRangeAttack
AttackTarget – Actor
ノードを組む
SpinningAttackはキャラクター回転させるノードが削除されました。Ali Elzoheiry氏はBlenderで回転させるアニメーションを作成したとのこと。

【インプット】SpinningAttack
AttackTarget – Actor
ノードを組む
***
*Short Range Attack
*Long Range Attack
*Spinning Attack

タスク: BTTask_MageAttack

・作成済。
【変数追加】
ShouldTeleport – Boolean
└デフォルト値はTrue。
ノードを組む

タスク: BTTask_MeleeAttack

・作成済。
ノードを組む

・GroundSmashAttackを追加するだけです。

ビヘイビアツリー: BT_EnemyMage

・作成済。
CombatState(Selector)にBTService_UpdateDistanceToTargetを追加。

ビヘイビアツリーを組む

・追加した変数ShouldTeleport(Boolean)はデフォルト値がTrueです。BTTask_MageAttackのGroundSmashAttackのところだけFalseに変更します。

ビヘイビアツリー: BT_EnemyMeleeAndJump

・作成済。
・複製して名前変更していなければBT_EnemyMelee。
ビヘイビアツリーを組む

Move ToのAcceptable Radiusは100。

コメント

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