[UE5] ダメージ処理の基本:Apply Damage と Event AnyDamage
敵に攻撃を当てて HP を減らす処理は、どんなゲームでもほぼ必ず作ることになります。UE5 にはダメージを受け渡すための仕組みが最初から用意されているので、自前で「相手の HP 変数を直接いじる」必要はありません。
仕組みの全体像
ダメージのやりとりは 送る側 と 受け取る側 に分かれます。
| 役割 | 使うノード | 置く場所 |
|---|---|---|
| 送る側 | Apply Damage |
武器・弾・プレイヤーなど攻撃する側 |
| 受け取る側 | Event AnyDamage |
敵・プレイヤーなど HP を持つ側 |
攻撃側は「誰に・いくつ」だけ伝えればよく、受けた側がどう減るか(防御力、無敵時間など)は受け取る側で決められます。お互いの中身を知らなくて済むのがこの形の良いところです。
送る側:Apply Damage
当たり判定(On Component Begin Overlap など)で相手を取得したら、Apply Damage を呼びます。
- Damaged Actor:ダメージを与える相手
- Base Damage:ダメージ量
- Event Instigator:攻撃した人のコントローラー(誰の攻撃か)
- Damage Causer:実際に当たったもの(弾や武器)
Base Damage が 0 のときは何も起きません。「呼んでいるのに反応しない」ときはまずここを確認します。
受け取る側:Event AnyDamage
HP を持つアクターのイベントグラフで Event AnyDamage を置きます。Damage に受け取った量が入っているので、HP から引きます。
HP を 0 未満にしない
引いた結果は Clamp (Float) で 0〜最大HP に収めておくと、UI のゲージがマイナスになるような不具合を防げます。
0 になったら死亡処理
Clamp の後に <= 0 で分岐して、死亡処理(アニメーション、破棄、スコア加算など)に進めます。死亡処理を関数かカスタムイベントに分けておくと、落下死など別の原因からも呼べて便利です。
当たった位置や範囲が必要なとき
Apply Point Damage(当たった位置つき)や Apply Radial Damage(爆発などの範囲)もあります。受け取る側はそれぞれ Event PointDamage・Event RadialDamage で受けられますが、どの種類でも Event AnyDamage は呼ばれるので、HP の計算は AnyDamage にまとめておくと重複しません。