81.

UE5のOverlapとHitの違い|コリジョンイベントの使い分け

編集

Unreal Engine 5(UE5)のコリジョンにおける「Overlap」と「Hit」の最大の違いは、物理的なブロック(押し返し)を伴うかどうかです。Overlap は互いをすり抜けながら「重なった」ことを検知するイベントで、Hit は互いをブロックして物理的にぶつかった瞬間を検知するイベントです。トリガーや範囲判定には Overlap を、衝突反応や着弾点の取得には Hit を使うのが基本的な使い分けになります。

この記事の要点
  • Overlapはすり抜けつつ「重なり」を検知するイベント。物理的な押し返しは起きない。
  • Hitは互いを「ブロック」して物理的にぶつかった瞬間を検知するイベント。押し返しが発生する。
  • Overlapには「Generate Overlap Events」、Hitには「Simulation Generates Hit Events」の有効化が必要。
  • 代表イベントは Overlap が「On Component Begin Overlap」、Hit が「On Component Hit」。
  • どちらが発生するかは Collision Response(Block / Overlap / Ignore)の組み合わせで決まる。

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の比較

両者の違いを項目ごとに整理すると次のようになります。

項目OverlapHit
物理的なブロック なし(すり抜ける) あり(押し返される)
必要な設定 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、という基本を押さえたうえで、目的に応じて設定を確認しながら使い分けることが、安定したコリジョン挙動への近道です。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 床の上に乗ったらイベントを発生させる方法
  2. OverlapAllDynamicとOverlapAllの違い
  3. タイトル画面を作る方法
  4. サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
  5. ボタンに文字を記載する方法
  6. Event ActorBeginOverlapとOn Component Begin Overlapの違い
  7. キャラクターに特定のオブジェクトとの当たり判定を付ける
  8. 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
  9. 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
  10. 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
  11. Blenderファイルをインポートする方法
  12. 鏡を作成する方法
  13. レベルブループリントでキャラクターの出現を設定する方法
  14. サードパーソンテンプレートにおけるキャラクター出現の定義
  15. アイテムに近づいたらボタンを押してイベントを発火させる方法
  16. 画面の中央にメッセージを表示する方法
  17. どこからでも呼び出せるカスタムイベントを作成する方法
  18. カスタムイベントに引数を追加する方法
  19. 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
  20. オブジェクトに近づいている間だけメッセージを表示する方法
  21. PCの画面を操作するUIを作る方法
  22. コンテンツブラウザに画像を追加する方法
  23. SetInputMode_UIOnlyを取り消す方法
  24. 特定の画像の上にマウスカーソルを置いたら手マークにする方法
  25. オブジェクトがアウトライナーで選択できない原因と解決策
  26. PlayerStartを作成する方法
  27. メニュー画面を作成して開く方法
  28. 「Esc」キーを押してメニュー画面を開く方法
  29. イベントの「On Clicked」と「On Pressed」の違い
  30. 「Set Input Mode」の種類と使い方
  31. 「Set Game Paused」の使い方と詳細解説
  32. Motion Matchingとは?
  33. 「GameMode」と「GameModeBase」の違い
  34. マップに配置したTargetPointを取得する方法
  35. TargetPointにタグをつけて取得する方法
  36. Spawnしたインスタンスがイベントを実行する方法
  37. 特定の時間ごとに処理を実行する方法
  38. 数値をランダムで出力する方法
  39. ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
  40. MaxWalkSpeedを変更する方法
  41. しゃがむ動作を導入する方法
  42. キャラクターのアニメーションを設定する方法
  43. 導入済みのプラグインを確認する方法
  44. Motion Matchingの導入と必要なプラグイン
  45. プレイヤーを非表示にする方法
  46. カメラを傾ける角度を制限させる方法
  47. 配列からランダムに重ならない要素を特定の数取得する方法
  48. カメラの映す画面に文字やエフェクトを付ける方法
  49. キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
  50. プライマリーデータアセットを活用する方法
  51. プレイヤーのHPといった変数を定義する最適な場所
  52. カメラに映った画面をスクリーンショットとして保存する方法
  53. ゲーム内のカメラ映像を保存して再表示する方法
  54. HighResShot を使って高解像度の画像を保存する方法(UE5)
  55. HighResShotで保存した画像のファイル名を取得する方法
  56. SceneCapture2DとFrameGrabberの画像保存方法の比較
  57. SceneCapture2Dを使用して画像を保存・取得する方法
  58. HighResShotとTake High Res Screenshotの違い
  59. ゲーム終了ボタンを作成する方法
  60. 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
  61. 画面上にメッセージを指定された時間表示させる方法
  62. シェーダコンパイル時間を短縮する方法
  63. 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
  64. データベースを活用する方法
  65. UE5.5がインストールされた環境にUE5.4を追加で導入する方法
  66. World PartitionとWorld Compositionの違い
  67. オープンワールドテンプレートとは?
  68. ポーンをスポーンさせても視点を切り替えない方法
  69. キャラクター同士がすり抜けてしまう問題の解決方法
  70. キャラクターの外見を動的に変更
  71. World Partitionでインスタンスが「アンロード済み」になる問題
  72. データ アセットとデータ テーブルの違い
  73. コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
  74. エディターのソースコードの自動保存の頻度を高める方法
  75. SpawnActorでSpawn Transform Rotationが反映されない理由
  76. ミニマップを表示しポーンの位置を反映する方法
  77. RInterp ToとVInterp Toの違い
  78. 毎秒実行するイベントの定義方法
  79. Niagara のエフェクトにコリジョンを持たせる方法
  80. 「Overlap」と「Hit」の違い
  81. OverlapはあるがHitがない原因
  82. Overlapした位置の座標を取得する方法
  83. ブループリントでレベル間のパラメータを受け渡す方法

最近更新/作成されたページ