ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
Event Any Damageとは
Event Any Damageは、Unreal Engine 5(UE5)でアクターが何らかのダメージを受けた瞬間に発火する、ダメージ受信用のイベントです。Apply Damage系のノードによってそのアクターへダメージが与えられると呼び出され、受けたダメージ量や与えた相手などの情報を受け取って、HPの減算や撃破処理といったゲームロジックにつなげられます。Blueprintのイベントグラフ上で右クリックメニューから追加でき、内部的にはC++のAActor::TakeDamage()に対応しています。
| この記事の要点 |
|---|
|
何が起きたときに発火するのか
Event Any Damageは、対象アクターに対してApply Damage(C++ではUGameplayStatics::ApplyDamage)などのダメージ適用処理が実行されたときに、その受け側のアクターで発火します。たとえば、敵キャラクターがプレイヤーの攻撃でダメージを受けたり、爆発や落下のダメージを受けたりした瞬間に呼び出されます。
重要なのは、ダメージは「受け側が自分で発生させる」のではなく、攻撃側(与える側)がApply Damageを実行することで受け側に届くという流れになっている点です。Event Any Damageはその届いたダメージを受け取る入口にあたります。
Event Any Damageが提供する情報
このイベントの出力ピンからは、ダメージに関する次の情報を取得できます。これらを使って「誰が」「何で」「どれだけ」ダメージを与えたかを判定できます。
- Damage(float):受けたダメージの量。HPからの減算などに使います。
- Damage Type(Damage Type):ダメージの種類を表すクラス。炎・毒・物理などをDamage Typeのサブクラスで区別し、処理を分岐できます。
- Instigated By(Controller):ダメージを与えた側のコントローラー。多くの場合、攻撃したプレイヤーやAIのコントローラーが入ります。
- Damage Causer(Actor):実際にダメージを与えたアクター。弾(プロジェクタイル)や手榴弾、罠など、当たった物そのものが入ります。
Instigated ByとDamage Causerは混同しやすい組み合わせです。たとえばプレイヤーが撃った弾が当たった場合、Instigated Byは「撃ったプレイヤーのコントローラー」、Damage Causerは「弾アクター」になります。スコア加算やキルログ表示などで「誰が倒したか」を知りたいときはInstigated By側を、ヒットエフェクトの出し分けなど「何に当たったか」を知りたいときはDamage Causer側を参照するのが一般的です。
ダメージの与え方(Apply Damage)
Event Any Damageを発火させるには、攻撃側でApply Damageノードを実行します。Apply Damageには主に次の入力があります。
- Damaged Actor:ダメージを与える対象アクター。
- Base Damage:与えるダメージ量。
- Event Instigator:与える側のコントローラー。受け側のInstigated Byに渡ります。
- Damage Causer:実際にダメージを与えるアクター。受け側のDamage Causerに渡ります。
- Damage Type Class:ダメージの種類を指定するクラス。受け側のDamage Typeに渡ります。
近接攻撃なら武器のコリジョン判定でヒットを検知した瞬間に、遠距離攻撃ならLine TraceやプロジェクタイルのHitイベントでヒット相手を特定した瞬間に、それぞれApply Damageを呼び出すのが定番です。Apply Damageを実行した対象アクター側にEvent Any Damageが実装されていれば、そこで処理が走ります。
Apply Damageの戻り値には、実際に適用されたダメージ量が返ります。受け側で防御力による軽減や上限処理を行った場合、与える側はこの戻り値を見ることで「実際に何ダメージ通ったか」を把握できます。ダメージ表示(フローティングダメージ)やコンボ判定などで活用される値です。なお、与える側と受け側で同じダメージ計算を二重に書かないよう、HPの増減はあくまで受け側のEvent Any Damage内に集約するのが管理しやすい設計になります。
Any Damage・Point Damage・Radial Damageの違い
UE5のダメージ受信イベントには、Event Any DamageのほかにEvent Point DamageとEvent Radial Damageがあります。それぞれ対応する適用関数と取得できる情報が異なります。次の表で整理します。
| 受信イベント | 対応する適用ノード | 主な用途 | 得られる追加情報 |
|---|---|---|---|
| Event Any Damage | Apply Damage | 種類を問わずダメージ全般を一括で受け取る | 追加情報なし(量・種類・与えた相手のみ) |
| Event Point Damage | Apply Point Damage | 弾が当たった点など、1点・特定方向からのダメージ | ヒット位置、ヒット方向、当たったボーン名などのHit情報 |
| Event Radial Damage | Apply Radial Damage | 爆発など、一定半径内の複数対象への範囲ダメージ | ダメージの中心位置や距離減衰に関する情報 |
ポイントとして、Apply Point DamageやApply Radial Damageで与えたダメージは、対応する個別イベントに加えてEvent Any Damageも呼び出される傾向があります。そのため、ヒット位置などの詳細が不要で「ダメージを受けた」という事実だけを一括で扱いたい場合はAny Damageを、ヒット位置や方向で演出を変えたい場合はPoint/Radialを使い分けると効率的です。これらの呼び出し関係はバージョンや実装により挙動が変わる可能性があるため、厳密な動作は使用中のエンジンバージョンで確認することをおすすめします。
使い方の例:ダメージを受けてHPを減らす
最も基本的な使い方は、受けたDamageをHP変数から差し引き、HPが尽きたら撃破処理を行うものです。次のような流れで組めます。
- ダメージを受けるアクターのBlueprintに、float型のHealth変数を作成し、初期値(例:100)を設定する。
- イベントグラフにEvent Any Damageを追加する。
- 現在のHealthから出力ピンのDamageを引き、結果をHealthへ代入(Set)する。
- BranchでHealthが0以下かどうかを判定する。
- 0以下ならDestroy Actorなどで撃破処理を行い、撃破エフェクトやサウンドを再生する。
応用として、出力ピンのDamage Typeを判定して炎なら継続ダメージを付与する、シールド中はダメージを無効化する、被弾時にヒットリアクションのアニメーションを再生する、といった分岐も同じイベント内で実装できます。また、Instigated Byを使って「最後に自分を攻撃した相手」を変数に保存しておけば、撃破時のスコア加算やキルログ表示、リベンジ対象の記録などにも応用できます。プレイヤーキャラクターであれば、HP変数をHUDのプログレスバーにバインドしておくことで、被弾と同時に体力ゲージが減る表現も実現できます。
C++のTakeDamageとの対応
Event Any Damageは、C++の仮想関数AActor::TakeDamage()に対応しています。シグネチャはおおむね次のとおりで、Blueprintの各出力ピンと素直に対応しています。
virtual float TakeDamage(float DamageAmount, const FDamageEvent& DamageEvent, AController* EventInstigator, AActor* DamageCauser);
C++側でAny Damageに相当する処理を受け取りたい場合は、TakeDamageをオーバーライドするか、OnTakeAnyDamageデリゲートにイベントをバインドします。BlueprintのEvent Any Damageは、このOnTakeAnyDamageに相当するものをノードとして扱えるようにしたものと考えると理解しやすいです。点ダメージ・範囲ダメージにはそれぞれOnTakePointDamage・OnTakeRadialDamageといった対応物があります。
つまずきやすい落とし穴
| 落とし穴 | 内容と対処 |
|---|---|
| Can Be Damagedが無効 | アクターのCan Be Damaged(CanBeDamaged)が無効だと、ダメージ自体が通らずイベントが発火しません。発火しないときはまずこの設定を確認します。実行時にSet Can Be Damagedで切り替えている場合も要注意です。 |
| 与える側の設定不足 | Apply DamageのDamaged Actorが正しい対象を指していない、対象に当たっていない、といったケースでは当然発火しません。受け側だけでなく、与える側のApply Damageが実際に実行されているかを確認します。 |
| ダメージ0で素通り | Base Damageが0だと、内部の処理によってはイベントが呼ばれなかったり、呼ばれてもDamageが0で意味のある処理にならない場合があります。最小ダメージの扱いは仕様に依存するため、HP計算側でも0ダメージを想定しておくと安全です。 |
| Damage Type未指定の前提 | Damage Type Classを指定せずに与えると、受け側のDamage Typeが既定値になります。種類で分岐する処理を組むなら、与える側でDamage Typeを必ず設定します。 |
よくある質問(FAQ)
Q. Event Any DamageとEvent Point Damageを同じアクターに両方置いてもよいですか。
A. 両方を配置できます。Apply Point Damageで与えた場合、Point DamageとAny Damageの双方が呼ばれる傾向があるため、HP減算をどちらか一方にまとめないと二重に減ってしまうことがあります。役割分担(演出はPoint、HP管理はAnyなど)を明確にしておくとよいでしょう。実装をシンプルに保ちたい場合は、HPの増減はEvent Any Damageに一本化するのが無難です。
Q. 自分のアクターから自分にダメージを与えることはできますか。
A. Apply DamageのDamaged Actorに自分自身を指定すれば可能です。落下ダメージや自爆などで利用されます。Instigated ByやDamage Causerに自分を渡すかどうかは、後続のスコア処理などに影響するため用途に応じて設定します。
Q. ダメージを受けても発火しません。何を見ればよいですか。
A. まず受け側のCan Be Damagedが有効かを確認します。次に、与える側でApply Damageが実際に実行され、正しいターゲットを指しているかをログやブレークポイントで確認します。コリジョンやチャンネル設定でヒット自体が成立していないケースも多いため、ヒット判定から順にたどると原因を切り分けやすくなります。範囲ダメージの場合は、爆発の中心や半径、遮蔽判定に使うチャンネルの設定によって対象に届いていないこともあるため、適用ノード側のパラメータもあわせて見直すとよいでしょう。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- Event BeginPlay
- Event ActorBeginOverlap
- Event Tick
- on component begin overlap
- On Component Hit
- CameraBoom(Spring Arm)
- Get Player Character
- Nav Mesh Bounds Volume
- AI MoveTo
- Pawn
- Create Render Target 2D
- Take High Res Screenshotノード
- Sphere Reflection Capture
- Event Tickノード
- ウィジェットのキャンバスパネル
- DefaultSceneRoot
- FloatingPawnMovement
- Set World Rotation
- Event Any Damage
- Set World Rotation
- VInterp To
- Get Socket Transform
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?