タイトル: Overlapは発生するがHitは発生しない原因
SEOタイトル: UE5で「Overlapは発生するがHitは発生しない」原因とは?
Unreal Engine 5(UE5)でのコリジョン判定において、「Overlapは正常に発生しているのに、Hitイベントが全く発生しない」という現象は多くの開発者が一度は直面する問題です。
この記事では、その原因と対策について詳しく解説していきます。
OverlapとHitの違いの復習
まずは基本をおさらいしておきましょう。
Overlapは物理的な衝突は発生せず、単に2つのコリジョンが重なったときに発生します。一方で、Hitは物理的な衝突・反応が発生する場面で発火します。
主な原因1:シミュレーションの有無
Hitイベントが発生するには、物理シミュレーションが有効になっている必要があります。静的なアクター同士や、物理挙動を持たないコンポーネント間では、そもそもHitイベントが発生しません。
例:
- Static Mesh に「Simulate Physics」が無効 → Hit発生しない
- Character Movementで動いているだけ → Overlapは発生するが、Hitはしない
主な原因2:コリジョンのプリセット設定
Collision Presetの設定がHitイベントの発生に大きく関係します。例えば、以下のような設定ではHitが無効化されている可能性があります。
- Collision Enabledが「Query Only」になっている
- Collision Responseが「Ignore」になっている
- Object Typeが適切でない(例:WorldDynamicとWorldStaticの組み合わせ)
Hitを検出したい場合、Collision Enabledを"Query and Physics"にするのが基本です。
主な原因3:コンポーネントの選択ミス
HitイベントはPrimitiveComponent(例:StaticMeshComponent)のみにバインドされます。たとえば、ルートがSceneComponentになっている場合は、Hitイベントが機能しない可能性があります。
また、イベントをバインドする対象が実際に接触していないコンポーネントであれば当然イベントは発生しません。
主な原因4:動いていない
Hitは少なくともどちらかが「動いている」必要があります。つまり、静止している2つのアクターが接触してもHitは起きません。
キャラクターの移動がNavMesh経由やSetActorLocationで行われている場合、HitではなくOverlapしか検出されないことがあります。
主な原因5:Generate Hit Eventsが無効
コンポーネントの詳細設定にある「Generate Hit Events」がオフになっていると、当然Hitイベントは発生しません。
これはStaticMeshComponent や CapsuleComponent に個別で設定されているため、使用している全てのコンポーネントを確認する必要があります。
主な原因6:Ignore by default
ObjectTypeの組み合わせによっては、デフォルトでHitイベントが無視されているケースがあります。たとえば、PawnとWorldStaticのようなペアでは、Hitが無視設定になっていることがあります。
このような場合は、カスタムのCollision Presetを作成して、明示的に「Block」に設定する必要があります。
対策まとめ
Hitが発生しないときは、以下の点をチェックしましょう:
- Simulate Physicsがオンになっているか
- Collision Enabledが"Query and Physics"になっているか
- Generate Hit Eventsが有効か
- コンポーネントのObjectTypeとCollision Responseの組み合わせが正しいか
- イベントをバインドしているのが接触するコンポーネントか
最後に
OverlapとHitの違いを理解した上で、それぞれの挙動を引き出すためには、コリジョン設定の確認が不可欠です。
UE5は柔軟な分、設定のミスで意図したイベントが発生しないことも多くあります。この記事のチェックリストを活用して、確実にHitイベントを発生させましょう!