UE5でゲームを作っていると、かなり高い確率でつまずくのがコリジョンです。
コリジョンは、いわゆる「当たり判定」のことです。
ただし、UE5のコリジョンは単に「当たる・当たらない」を決めるだけの仕組みではありません。
むしろ重要なのは、
どの物体が、どの相手に、どう反応するのか
を設計することです。
コイン無限増殖バグの原因は、コリジョン設定の設計ミスです。
UE5のコリジョンで初心者がつまずく理由は、Block / Overlap / Ignore の意味が難しいからではありません。
本質は、「Actor同士の関係性」を設計できていないことです。
今回は、コインが無限に増殖してしまうバグを題材に、UE5のコリジョンを本質から整理していきます。
今回起きたバグ

今回の例では、プレイヤーがボックスにヒットすると、コインがスポーンする仕組みを作っていました。
本来やりたかったことはシンプルです。
プレイヤーがボックスにヒットしたら、コインを10枚スポーンさせる。
しかし実際には、想定以上の数のコインが大量にスポーンしてしまいました。
原因は、スポーンしたコインがボックスにヒットし、そのヒットをきっかけにさらにコインがスポーンしていたことです。
つまり、こういうループが発生していました。
- プレイヤーがボックスにヒットする
- コインがスポーンする
- スポーンしたコインがボックスにヒットする
- そのヒットで、またコインがスポーンする
- 以降、無限に繰り返される
これが、コイン無限増殖バグの正体です。
UE5のコリジョンとは何か

コリジョンとは、コライダーと呼ばれる検出可能な物体を使って、Actor同士の空間的な関係性を定義する仕組みです。
かなり簡単に言うと、
Actor同士が、ぶつかるのか、重なるのか、無視するのかを決める仕組み
です。
UE5のコリジョンを理解するうえで大事なのは、次の3つです。
- コライダー
- コリジョンの反応
- オブジェクトタイプ
この3つがわかると、UE5のコリジョンの全体像はかなり見えやすくなります。
コライダーとは何か

コライダーとは、コリジョン形状とコリジョン設定を持つ「当たり判定可能な物体」です。
球体、箱型、カプセル型などの形状を持ち、その形状を使って当たり判定を行います。
見た目のメッシュそのものではなく、当たり判定用の代替形状が使われることもあります。
この代替形状は、コリジョンプロキシと呼ばれます。

実際の開発では、コライダーやコリジョンプロキシをまとめて「コリジョン」と呼ぶことも多いです。
厳密な用語の違いはありますが、まずは、
コリジョンとは、当たり判定を行うための設定と形状を持つ仕組み
と理解しておけば大丈夫です。
コリジョンの反応は3種類
UE5のコリジョン反応は、大きく次の3種類です。

Block

Blockは、衝突する反応です。
物体同士がぶつかり、そこで止まるような関係です。
たとえば、プレイヤーと壁がBlockになっていれば、プレイヤーは壁をすり抜けません。
Overlap

Overlapは、重なるだけの反応です。
当たり判定はありますが、物理的にぶつかって止まるわけではありません。
たとえば、プレイヤーがアイテムを拾うとき、アイテムにぶつかって止まる必要はありません。
プレイヤーとアイテムが重なったことを検出して、取得処理を実行できれば十分です。
このような場合は、Overlapが使われます。
Ignore

Ignoreは、完全に無視する反応です。
お互いに当たり判定を行わず、すり抜けます。
そもそも反応する必要がない組み合わせは、Ignoreにするのが基本です。
無限増殖バグの原因
今回のバグでは、コインとボックスの関係性が正しく設計されていませんでした。
本来、コインとボックスは反応する必要がありません。
しかし、コインとボックスがBlockやHitを発生させる関係になっていたため、スポーンしたコインがボックスにヒットしてしまいました。

その結果、
コインがボックスにヒットする
→ コインをスポーンする
→ スポーンしたコインがまたボックスにヒットする
→ またコインをスポーンする
という無限ループが発生しました。

これは、初心者がかなりハマりやすいパターンです。
「見た目としては正しそうに動いている」のに、裏側で不要なイベントが発火していることがあります。
大事なのは、不要なイベントを発火させないこと
今回のポイントは、単に「設定を変えれば直る」という話ではありません。
本質は、
不要なコリジョン反応を発生させないこと
です。

たとえば、コインとボックスが重なったときに何か処理をしたいなら、Overlapでもよいです。
しかし、コインとボックスが反応する必要がまったくないなら、Ignoreにした方が安全です。
Overlapにしてしまうと、Overlapイベントが発火する可能性があります。
Blueprint側でOverlapイベントに処理がつながっていれば、意図しない処理が実行されることもあります。
そのため、基本方針としては、
何か起こしたい相手だけOverlap / Blockにする。
何も起こしたくない相手はIgnoreにする。
これがかなり重要です。
Object Channel / Trace Channel / Preset の違い
UE5のコリジョン設定では、主に次の3つを扱います。
- Object Channel
- Trace Channel
- Preset
Object Channelは物の分類、Trace Channelはレイキャスト用、Presetは反応パターンのまとめとして整理しました。

Object Channel
Object Channelは、物体の種類を定義するものです。
たとえば、
- Player
- Enemy
- Item
- Projectile
- WorldStatic
- WorldDynamic
のように、「その物体が何者なのか」を分類します。
つまり、Object Channelは、
その物体は誰なのか?
を決めるものです。
Trace Channel
Trace Channelは、レイキャストなどで「何に当たったか」を調べるための分類です。
Object Channelが物体そのものの分類だとすると、Trace Channelは「調べるための線」の分類です。
たとえば、
- Visibility
- Camera
- CustomTrace
のようなものがあります。
Preset
Presetは、Object ChannelやTrace Channelに対する反応をまとめたものです。
毎回すべての反応を手動で設定していると大変なので、
この種類の物体は、この相手にはBlock、この相手にはOverlap、この相手にはIgnore
という反応パターンをまとめておきます。
これがPresetです。
スライドの最後でも、Object Typeは「その物体は誰なのか」、Responseは「相手とどう関係するのか」、Presetは「関係のセットをまとめるもの」と整理されています。
今回の設定例
今回のようなコイン無限増殖バグを防ぐには、コインとボックスの関係を整理する必要があります。
考え方としては、次のようになります。
- コインはアイテム、またはProjectile系の軽量オブジェクトとして扱う
- ボックスはコインに対してHitを発生させない
- コイン同士も不要にぶつからないようにする
- 必要な相手だけに反応させる

具体的には、コイン用のObject ChannelやPresetを作成し、不要な相手への反応をIgnoreにします。
もし「重なりだけ検出したい」理由があるならOverlapでもよいですが、何も処理しないならIgnoreの方が安全です。
今回のバグは、コインとボックスの反応が不要なのに、Hitイベントが発火する関係になっていたことが原因でした。
そのため、コインとボックスの関係をIgnoreまたはOverlapに変更し、Hitイベントが発火しないようにすることで、無限増殖を止めることができます。
修正後の結果

修正後は、コインが適切な数だけスポーンするようになりました。
今回の目的は、1回のヒットで10枚のコインをスポーンさせることでした。
修正前は、明らかに異常な量のコインがスポーンしていました。
しかし、コリジョン設定を整理したことで、想定通りの数だけコインが出るようになりました。
コリジョンは「仕組み」ではなく「設計」
UE5のコリジョンは、最初はかなり複雑に見えます。
しかし、押さえるべきポイントは次の3つです。
- Object Type:その物体は誰なのか
- Response:相手とどう関係するのか
- Preset:その関係のセットをどうまとめるのか
この3つを理解すると、コリジョンは単なる当たり判定ではなく、Actor同士の関係性を設計するものだとわかります。
重要なのは、
どのActorが、どのActorに、どう反応するべきか
を明確にすることです。
コリジョン設定が整理されていないと、今回のような無限スポーンバグや、意図しないOverlapイベント、予期しないHitイベントが発生しやすくなります。
逆に、コリジョン設計が整理されていれば、ゲーム全体の実装はかなり楽になります。
まとめ
今回は、コイン無限増殖バグを題材に、UE5のコリジョンを解説しました。
ポイントは次の通りです。
- コリジョンはActor同士の関係性を定義する仕組み
- 反応はBlock / Overlap / Ignoreの3種類
- 不要な反応は発生させない
- Object Channelは物体の分類
- Trace Channelはレイキャスト用の分類
- Presetは反応パターンのまとめ
- コリジョンは「仕組み」ではなく「設計」
初心者のうちは、コリジョン設定をなんとなく触ってしまいがちです。
しかし、コリジョンはゲーム内の物体同士の関係性そのものです。
「誰が、誰に、どう反応するのか」を整理するだけで、UE5のバグはかなり減らせます。
コリジョンは、当たり判定の設定ではなく、ゲーム内のActor同士の関係性を設計する作業です。
Youtube解説
動画では、実際のコイン無限増殖バグの挙動と、UE5上での設定画面もあわせて解説しています。
文章だけだとイメージしづらい方は、動画もあわせて見てみてください。
コメント