タイトル: 「Overlap」と「Hit」の違い
SEOタイトル: UE5のOverlapとHitの違い|コリジョンイベントの使い分け
Unreal Engine 5(UE5)のコリジョンにおける「Overlap」と「Hit」の最大の違いは、物理的なブロック(押し返し)を伴うかどうかです。Overlap は互いをすり抜けながら「重なった」ことを検知するイベントで、Hit は互いをブロックして物理的にぶつかった瞬間を検知するイベントです。トリガーや範囲判定には Overlap を、衝突反応や着弾点の取得には Hit を使うのが基本的な使い分けになります。
| この記事の要点 |
|---|
|
Overlapとは
Overlap(オーバーラップ)は、2つのコリジョンが物理的に押し返し合うことなく、空間的に重なったときに発生するイベントです。互いをすり抜けながら「いま重なっている/重なりが終わった」という状態を通知する仕組みで、当たり判定はあっても物体は止まりません。
Overlap を発生させるには、おもに次の条件を満たす必要があります。
- 重なりを検知したいコンポーネントで「Generate Overlap Events(オーバーラップイベントを生成)」を有効にする
- 関係する2つのコンポーネントの Collision Response が、互いに対して Overlap(または少なくとも一方が Overlap で他方が Block)として解決されること
- どちらか一方でも Ignore になっている場合、イベントは発生しない
典型的な利用シーンには次のようなものがあります。
- プレイヤーがトリガーゾーンに入った/出たことの検知
- アイテムを拾うための取得判定
- 範囲攻撃や回復エリアなど、すり抜けても良い当たり判定
代表的なイベントノードは「On Component Begin Overlap」「On Component End Overlap」(アクター単位では「On Actor Begin Overlap」など)です。これらは重なりの開始・終了という特定のタイミングでのみ呼ばれるため、毎フレーム処理する Event Tick より効率的に状態変化を扱えます。
Hitとは
Hit(ヒット)は、2つのコリジョンが互いをブロックして物理的にぶつかった瞬間に発生するイベントです。壁にぶつかって止まる、物体が床に落ちて跳ね返る、といった「すり抜けない衝突」が対象になります。
Hit を発生させるには、おもに次の条件が関係します。
- 衝突を検知したいコンポーネントで「Simulation Generates Hit Events(シミュレーションでヒットイベントを生成)」を有効にする
- 関係する2つのコンポーネントの Collision Response が、互いに対して Block として解決されること
- 少なくとも一方は実際に移動・物理シミュレーションしていること(双方が完全に静止していると衝突自体が起こらない)
典型的な利用シーンには次のようなものがあります。
- キャラクターや物体が壁・地面にぶつかって止まる
- 投射物が対象に着弾した瞬間にエフェクトを出す
- 物理オブジェクトが落下して跳ね返る
代表的なイベントノードは「On Component Hit」(アクター単位では「On Actor Hit」)です。Hit イベントでは、引数として渡される Hit Result から衝突点(Impact Point)や法線(Impact Normal)などの接触の詳細情報を取得できる点も特徴です。
OverlapとHitの比較
両者の違いを項目ごとに整理すると次のようになります。
| 項目 | Overlap | Hit |
|---|---|---|
| 物理的なブロック | なし(すり抜ける) | あり(押し返される) |
| 必要な設定 | Generate Overlap Events を有効化 | Simulation Generates Hit Events を有効化 |
| 必要な Collision Response | 互いに Overlap(または片側Block+片側Overlap) | 互いに Block |
| 代表イベント | On Component Begin Overlap / End Overlap | On Component Hit |
| 取得できる主な情報 | 相手のアクター・コンポーネント | 相手+Hit Result(Impact Point、Normal など) |
| 主な用途 | トリガー、取得判定、範囲判定 | 衝突反応、着弾、跳ね返り |
どちらを使うべきか
判断に迷ったときは、「物体を物理的に止めたいかどうか」を基準にすると整理しやすくなります。
- すり抜けてよい/重なったことだけ知りたい → Overlap(トリガー、取得判定、エリア判定など)
- 物体をぶつけて止めたい・跳ね返したい → Hit(衝突反応や物理的な手応えが必要な場面)
- 接触点や法線など正確な座標が欲しい → Hit(Hit Result から取得できる)
たとえば投射物では、壁を物理的に止めたいなら Block+Hit、敵をすり抜けて当たり判定だけ取りたいなら Overlap、というように1つのアクター内でも目的に応じて使い分けることがあります。
Collision Response(Block / Overlap / Ignore)との関係
Overlap と Hit のどちらが発生するかは、最終的に各コンポーネントの Collision Response の組み合わせによって決まります。Response には次の3種類があります。
- Block:互いに通り抜けず、物理的にブロックする。双方が Block のとき Hit イベントの対象になる。
- Overlap:通り抜けるが重なりを検知する。Overlap イベントの対象になる。
- Ignore:相手をまったく無視する。Hit も Overlap も発生しない。
重要なのは、Response は双方の組み合わせで解釈されるという点です。一般的な目安として、次のように整理できます。
- 双方が Block → ブロックが起き、Hit イベントが発生し得る(Overlap は発生しない)
- 少なくとも一方が Overlap で、もう一方が Block か Overlap → すり抜けて Overlap イベントが発生し得る
- どちらか一方でも Ignore → 何も発生しない
つまり、Response の設定で「ブロックするか/すり抜けるか」が決まり、その上で各イベントの生成チェックボックス(Generate Overlap Events、Simulation Generates Hit Events)が有効になっていて初めて、対応するイベントが呼び出されます。実際の挙動は使用するコリジョンプリセットやプロジェクト設定のチャンネル構成によって変わるため、意図した組み合わせになっているかをエディタ上で確認することをおすすめします。
よくある落とし穴
Overlap・Hit が「動かない」というトラブルの多くは、設定の組み合わせミスが原因です。代表的なものを挙げます。
| よくある原因 | 確認ポイント |
|---|---|
| イベント生成のチェックを入れ忘れている | Overlap なら Generate Overlap Events、Hit なら Simulation Generates Hit Events が有効か確認する。 |
| Block 同士なのに Overlap を期待している | 双方が Block の場合は Hit が発生し、Overlap は発生しない。Response を Overlap に変える。 |
| 片側が Ignore になっている | 一方でも Ignore だと Overlap も Hit も発生しない。両側の Response を見直す。 |
| 動かない物同士で Hit を期待している | Hit は接触の瞬間に発生するため、移動・物理シミュレーションする側が存在するか確認する。 |
よくある質問
Q. Overlap と Hit は同時に発生しますか。
同じ1組の接触に対しては、基本的にどちらか一方が対象になります。双方が Block していれば Hit、すり抜けていれば Overlap が対象になるためです。ただし、複数のコンポーネントを持つアクターでは、コンポーネントごとに Response 設定が異なるため、アクター全体として両方のイベントを扱うように構成することは可能です。
Q. 当たり判定が軽いのはどちらですか。
一概には言えませんが、Overlap は重なりの開始・終了という限定したタイミングでのみ呼ばれるため、状態変化の検知に向いています。一方で多数のオブジェクトが常時重なり合うような状況では Overlap の判定コストも無視できません。用途に対して過剰な検知設定になっていないかを見直すことが、最適化の基本になります。
Q. キャラクターが壁ですり抜けてしまいます。どちらの設定を見ればよいですか。
すり抜けは Collision Response の問題であることが多いです。壁とキャラクターのコリジョンが互いに Block になっているか、コリジョン形状が正しく設定されているかを確認してください。Hit イベント自体を取りたい場合は、加えて Simulation Generates Hit Events の有効化も必要です。
まとめ
UE5 における Overlap と Hit は、どちらも接触に関するイベントですが、すり抜けながら重なりを検知するのが Overlap、ブロックして物理的にぶつかるのが Hitという点で役割が異なります。実際にどちらが発生するかは Collision Response(Block / Overlap / Ignore)の組み合わせで決まり、その上で対応するイベント生成設定を有効にして初めてイベントが呼び出されます。トリガーや範囲判定には Overlap、衝突反応や着弾点の取得には Hit、という基本を押さえたうえで、目的に応じて設定を確認しながら使い分けることが、安定したコリジョン挙動への近道です。