テレポート、ファイアボール、回復を使う魔術師の敵。
中ボスくらいの敵ができた。
自作ゲームでそこそこ熱く戦えるの熱い。#UE5 #アンリアルエンジン pic.twitter.com/FIXxgZwMi1— ハマーキーUE (@Hummerkey_UE) October 29, 2023
Ali Elzoheiry氏のチュートリアルから学ぶ敵AIの第10回になります。過去記事で作成したものが必須になります。
敵AI:敵がルートを巡回しプレイヤーや音に気付くと反応
敵AI 2:敵が間合いを取りながら攻撃してくる
敵AI 3:敵が逃げて隠れて再び攻撃してくる
敵AI 4:近距離タイプと遠距離タイプの敵を分ける
汎用性と拡張性の高いダメージシステム
プロジェクタイル(Projectile)の基本
敵AI 5:敵の攻撃とブロック
敵AI 6:プレイヤーを見失った敵が捜索を始める
敵AI 7:NavLinkProxyで敵にジャンプさせる
敵AI 8:集団の敵の攻撃タイミングの管理
敵AI 9:AIが敵と味方を区別して戦うようになるチームバトル
AOE(Area of Effect)
記事は自分でやり直す時のために簡単にまとめており、独自の仕様にもなっていますから、学習するなら参考元のAli Elzoheiry氏のSmart Enemy AI Tutorial Seriesの動画を視聴してください。
Smart Enemy AI | (Part 13: Mage Enemy) | Tutorial in Unreal Engine 5 (UE5) | Youtube
必要なもの
- AOEシステム
AOE(Area of Effect) - 魔法弾のアニメーション
Street Fighter Hadouken | Mixamo - 回復魔法のアニメーション
Two Handed Casting Spell Pull In Blast Out | Mixamo - テレポートの軌跡
P_Gideon_Burden_DoT
P_Gideon_Meteor_Trail
Paragon: Gideon:Epic コンテンツ – UE マーケットプレイス - 魔術師用のロコモーションなど ※必要に応じて
Idle / Walk x 4 / Run x 4 / Hit Reaction / Block
ビヘイビアツリー: BT_EnemyMage
アニメーションBP: ABP_EnemyMage
BP_EnemyBaseで使用しているアニメーションブループリントを複製し、名前をABP_EnemyMageにします。
必要に応じてロコモーションを置き換える。
魔術師用のロコモーションにするならブレンドスペースを作成する必要があります。
その場合、アニメーションシーケンスのEnableRootMotionとForce Root Lockにチェックを入れましょう。
魔法弾のAnimMontage
※AOEで魔法弾を作っている時に作成済です。名前がFireball_Montageでした。
予備動作が長いのでカットします。
Start Timeを0.7にする。
未作成ならアニメーションシーケンスからAnimMontageを作成。
魔法を撃つタイミングに通知を追加 > Montage Notify。名前をMagicballにします。
メイジBP: BP_EnemyMage
BP_EnemyBaseから「子ブループリント クラスを作成」する。
名前はBP_EnemyMage。
Animation > Anim ClassにABP_EnemyMageを設定。
インターフェース: SetMovementSpeed
Idle0、Walking150、Jogging250、Sprinting400。
※変数化している場合は変数のデフォルト値に入力。
インターフェース: GetIdealRange
Attack Radius500。攻撃距離です。
Defend Radius700。間合いです。
※変数化している場合は変数のデフォルト値に入力。
その他のデフォルト値
Behavior Tree
Hit Reaction Montage
Block Montage
イベントグラフ
・BP_EnemyBaseから戦闘態勢のON/OFFをコピペしてから編集。
・武器は持たないので武器関連のノードは消す。
・戦闘態勢ON/OFFのAnimMontageはセットする必要があります。構えているIdleアニメーションシーケンスからAnimMontageを作成すれば良いでしょう。
戦闘態勢を解除した時は、棒立ちのAnimMontageにする。AnimMontageが長すぎる場合はEnd Timeで調整。
・BP_EnemyBaseと共用はせず、BP_EnemyMageのイベントグラフにイベント Enemy Attackを配置します。
・BP_EnemyBaseとの共用も可能ですが、共用しないパターンもやりたいだけです。
・BPC_AttacksでMagicBallを作成済なのが前提です。
【変数】
IsTeleporting? – Boolean
└新規作成。
TeleportBodyEffect – Cascade Particle System
└Spawn Emitter AttachedのReturn Valueから変数へ昇格。
TeleportTrailEffect – Cascade Particle System
└Spawn Emitter AttachedのReturn Valueから変数へ昇格。
【イベントディスパッチャー】OnTeleportEnd
・AI Move ToのAcceptance Radius(受入半径)を15にしていますが、15だとたまに受け入れてもらえず動作が遅れる場合もあります。50くらいした方が安定します。
・最後のTeleportEndはカスタムイベントを作成してから繋げる。
タスク: BTTask_Mage_Teleport
名前: BTTask_Mage_Teleport
新規作成。
タスク: BTTask_MageAttack
名前: BTTask_MageAttack
BTTask_RangedAttackを複製して名前変更。
・BTTask_RangedAttackを複製した場合はSet Focusの後ろからを編集。
【変数】
AttackTargetKey – Blackboard Key Selector
└新規作成。目玉アイコンを開ける。※BTTask_RangedAttackを複製した場合は既にあります
TokensNeeded – Integer
└作成。目玉アイコンを開ける。※BTTask_RangedAttackを複製した場合は既にあります
TeleportLocation – Blackboard Key Selector
└新規作成。目玉アイコンを開ける。
環境クエリ: EQS_Teleport
EQS_Seekingを複製してEQS_Teleportにする。
・PathCostのTest ModeをPath Existにする。
・TraceのTrace SphereをSphere、Extent Xを40、ブールー一致のチェックを外す。
・Distanceを追加。Distance ToをEQS_Context_AttackTarget、Float Value Minを350、Float Value Maxを500にする。
Float Value MaxのData BindingをQuery Paramsにして、Param NameをAttackRadiusにする。
・Distanceを追加。Test PurposeをScore Only。
ビヘイビアツリー: BT_EnemyMage
■Attack(Sequence)
・Run EQS QueryのQuery TemplateをEQS_Teleport、BBKeyをAttackRadius、Blackboaed KeyをPointOfInterest。
・BTTask_MageAttackのAttack Target KeyをAttackTarget、Tokens Needeを1、TeleportLocationをPointOfInterest。
・BTTask_Mage_TeleportのTeleport LocationをPointOfInterest。
■Evade(Sequence)
・BTTask_SetMovementSpeedのSpeedをSprinting。
・Run EQS QueryのBBKeyをDefendRadius。
■MoveToLineOfSight(Sequence)
・Run EQS QueryのBBKeyをDefendRadius。
回復
回復魔法のAnimMontage
回復魔法のアニメーションシーケンスからAnimMontageを作成
Start Timeを1.6
End Timeを2.0
にする。
アセットブラウザから回復魔法のアニメーションシーケンスをAnimMontageのタイムラインにドロップして追加する。
追加したアニメーションシーケンスの
Start Timeを2.0
End Timeを2.3
Play Rateを0.1
にする。
メイジBP: BP_EnemyMage
【変数】
HealAOE – BP_AOE_Heal
└クラスからアクタをスポーンしますのReturn Valueから変数へ昇格。
【イベントディスパッチャー】
OnHealOverTimeEnd
タスク: BTTask_Mage_Heal
名前: BTTask_Mage_Heal
新規作成。
コメント