公開日:2025/06/08  更新日:2025/06/08

UE5のダメージ処理について

UE5でダメージ処理をどう実装するかについて紹介していく。

これまでの以下の記事で銃を持たせ、エイムし弾を撃てるようにしている。この弾が当たると敵にダメージが入るようにしていこうと思う。

銃の持ち方

ブレンドスペース

エイムオフセット

視点変更

弾を撃つ

先に確認してみてほしい。

Get・SetやSequenceやBranchといった基礎的なノードがわからない場合は先に以下記事を確認してほしい。

アンリアルエンジンのノードの一覧

UE5のダメージ処理の目次

当たり判定をつける
インターフェース作成
ダメージ処理
目次にもどる

当たり判定をつける

まず、以前までの記事で作成した弾にコリジョンを使って当たり判定をつけていく。

コリジョンがよくわからない場合は先に以下の記事を確認してみてほしい。

コリジョン

以前の記事で作成したBP_Bulletを開く。

コンポーネントタブで追加を選択し、Collsionの項目から今回はCapsule Collisionを選択して追加する。

UE5でダメージ処理

Capsuleを選択しビューポートを見る。

UE5でダメージ処理

Capsuleの位置・向き・大きさを調整し、弾のNiagaraが表示されている範囲を覆うようにする。

UE5でダメージ処理

Capsuleを選択し右クリックし、イベントを追加→On Component Begin Overlapを選択する。

UE5でダメージ処理

イベントグラフに以下のようなノードができる。一旦コンパイルして閉じる。

UE5でダメージ処理

次に弾を喰らう敵を作成する。

好きな敵を用意すればいいが、今回は以下の無料アセットのオークを使って説明していこうと思う。

Warrior Orc(無料のオークのアセット)

コンテンツドロワーを開き任意の場所で右クリックしブループリント→ブループリントクラスと選択。

UE5でダメージ処理

キャラクターを選択。

UE5でダメージ処理

できたブループリントにBP_Orcと名前をつけて開く。

コンポーネントタブでBP_Orcを選択し、詳細タブのメッシュの矢印を選択し、SK_Warrior_Orcを選ぶ。

UE5でダメージ処理

SK_Warrior_OrcのメッシュをCapsule Componentが覆うようにする(メッシュまたはCapsule Componentの大きさ・位置を調整)。

UE5でダメージ処理

続いて、操作キャラ、敵、弾のコリジョン設定を新たに作成していく。

まず、上部メニューの編集を選択し、プロジェクト設定を押す。

UE5でダメージ処理

左側のメニューでコリジョンを選択し、新規のオブジェクトチャンネルを押す。

UE5でダメージ処理

名前をPlayerとして、承認を押し、作成する。

UE5でダメージ処理

同様にEnemyとBulletも作成する。

UE5でダメージ処理

BP_Playerを開き、コンポーネントタブのCapsule Componentを選択する。

詳細タブのコリジョンの項目のコリジョンプリセットをCustomに変更し、Object TypeをPlayerにする。オブジェクト応答のBulletをオーバーラップに変更する。

UE5でダメージ処理

同様にBP_Orcを開き、Capsule Componentを選択する。

詳細タブのコリジョンの項目のコリジョンプリセットをCustomに変更し、Object TypeをEnemyにする。オブジェクト応答のBulletをオーバーラップに変更する。

UE5でダメージ処理

同様にBP_Bulletを開き、Capsuleを選択する。

詳細タブのコリジョンの項目のコリジョンプリセットをCustomに変更し、Object TypeをPlayerにする。トレース応答・オブジェクト応答について全て無視を選択する。

UE5でダメージ処理

そして操作キャラが弾を発射(弾がリスポーン)する処理の後にオブジェクト応答のEnemyについてOverlapに変更するようにSet Collsion Response to Channelノードを作成して配置する。

UE5でダメージ処理

最初からオブジェクト応答のEnemyがOverlapだと、敵の至近距離で撃ち弾がリスポーンした瞬間に敵に当たると、攻撃力が入る前にダメージ処理が行われてHPが減らないバグが発生したため。

目次にもどる

インターフェース作成

インターフェースは「相手が不明でも同じ処理を行う」という時に役立つ。

例えば、今回行おうとしているダメージ処理もそうだ。

操作キャラが敵を、銃で撃っても格闘攻撃で殴っても、攻撃力を元に同じダメージ処理を行う必要がある。

更に言えば、敵が操作キャラを撃ったり殴ったりする場合も同じ処理が必要だ。

別にCast toなどで誰の銃攻撃なのか格闘攻撃なのか特定した上で処理することも可能だが、それでは処理が重くなってしまう。ぜひインターフェースを使いたい。

そこで今回はインターフェースを作り、BP_Player(操作キャラ)とBP_Orc(敵)の親クラスBP_Characterを作成し、BP_Characterにインターフェースを適用しようと思う。

任意の場所で右クリックし、ブループリント→ブループリントインターフェースを選択する。

UE5でダメージ処理

できたファイルにI_Characterと名前をつける。

次にBP_Characterのブループリントを作り、BP_PlayerとBP_Orcの親クラスとする。

親クラスについてわからない場合、以下の記事を確認してほしい。

親クラスの変更方法

I_Characterを開き、追加→関数のように選択しDamageの関数を作成する。

UE5でダメージ処理

Damageの関数を選択して詳細タブのインプットで+マークを押して追加し、DamageValueを作成し型はintegerにする。

UE5でダメージ処理

これは、Damage関数内で必要になるダメージの値を与えるための引数として使う。

コンパイルする。

BP_Characterを開き、クラス設定を選択し、詳細タブの実装インターフェースでI_Characterを選択する。

UE5でダメージ処理

変数としてHPとATK(攻撃力)を作成する。

加えてデータアセット用のクラスを入れるBP_WEAPONの変数を作っている。

UE5でダメージ処理

データアセットに各武器のステータスを入れて、そこから武器の攻撃力をとってきている。

必ずしもデータアセットを使う必要はない。詳しく知りたい場合は以下の記事を確認してほしい。

データアセット

インターフェースのDamageを選択し、以下のようにノードを配置してつなげる。

UE5でダメージ処理

Event Damageは最初から出ている。Subtract(減算)を使って、HPからDamage Value(攻撃力の値が入っている)の値を引き算しその値をHPにセットするだけの簡単な処理となっている。好みで防御力などを入れてもっと複雑な処理にしてもいい。

テスト用にHPにセット後の値をPrint Stringに入れるようにしている。

これでインターフェースのdamage関数は完成だ。コンパイルしよう。

目次にもどる

ダメージ処理

BP_bulletを開く。この記事の最初で当たり判定を持たせる作業をしており、現状はイベントグラフにOn Component Begin Overlapのみ出した状態になっている。

UE5でダメージ処理

ここから出力のOther Actorからワイヤーを伸ばして、先ほど作成したインターフェースのDamageの関数を出す。

UE5でダメージ処理

On Component Begin Overlapに以下のようにノードをつなぐ。

UE5でダメージ処理

On Component Begin OverlapのOther Actorには接触したアクタが出力されており、それをDamage関数のTargetへつなぐことで、 TargetがDamageのインターフェースを持つブループリントであればダメージ処理を行うことができる。

BP_Characterのインターフェースは子クラスであるBP_PlayerとBP_Orcにも継承されているので、弾を撃ち当たったのがBP_Orcであればダメージ処理を行うことができる。将来的にはBP_Orcの攻撃でBP_Playerがダメージを喰らうといった処理も必要だが、それも同様の方法で簡単に作ることができる。

Bullet ATKには何らかの方法で攻撃力の数値を入れておく。自分の場合はデータアセットの武器の攻撃力の値を入れている。それをDamage関数のDamage Valueに入力することで関数の計算が可能となる。

コンパイルする。

BP_Orcのブループリントを開き、コンポーネントタブでBP_Orcを選択する。

詳細タブでデフォルトの項目を見る。ここには親クラスで作成した変数にデフォルト値を入れることが可能となっている。今回はHPを100にしてみる。

UE5でダメージ処理

BP_Orcのブループリントをドラッグ&ドロップしてレベル上に配置する。

UE5でダメージ処理

これで以下のように銃を撃って弾が敵に当たると、ダメージ処理が行われ以下のようにPrint Stringで現在のHPが表示される。今回は銃の攻撃力を50にしているので50ずつHPが減っているのがわかる。


後はHPの数値を元に、HP0以下なら倒れるアニメーションを入れたり、HPバーを作成したりすればゲームらしくなる。

次の記事では敵に攻撃を当てHPを0にすることで死亡させられるようにする。

死亡処理

アンリアルエンジンの基本まとめへ戻る

page top