# 形状に合わせた最も単純な衝突テストを使用する

> ゲームに適した衝突表現を選択し、不必要なペア チェックを減らし、障害物を通過するオブジェクトを診断します。

- URL: https://oneshotgems.ai/ja/topics/game-collision-detection
- カテゴリ: ゲーム開発者向け
- 種類: ガイド
- 更新日: 2026年10月5日

衝突判定では、ゲームオブジェクト同士が重なるか、互いの進路を横切るかを調べます。最初に使う形状は、たいていアートより単純で構いません。グリッドセルや足場には矩形、丸いキャラクターには円、不規則な障害物には少数の形状を組み合わせます。「接触」「侵入」「通過」のどれを判定するかを明確にし、一貫して答えるテストを選びます。ルール自体がおおまかなゲームで、ピクセル単位の判定が必要になることはほとんどありません。

## テストをルールに一致させる

軸に揃えられた長方形の場合、各オブジェクトの左、右、上、下の範囲を比較します。オーバーラップは、間隔が両方の軸で交差するときに発生します。円の場合は、中心距離と半径の合計を比較します。グリッド ゲームでは、2 人のアクターが同じセルを要求するかどうかをチェックすることで、ジオメトリを完全に回避できます。

色の異なる形を2つ置いた小さな診断用シーンを作り、設定した当たり判定領域を表示します。境界が接する場合、部分的に重なる場合、当たらずにぎりぎり通過する場合を試します。境界の接触を衝突とみなすか決め、そのルールを一貫して使い、移動と得点判定が食い違わないようにします。

## 高速なすり抜けを防ぐ

高速オブジェクトは、ある更新では薄い壁の片側に存在し、次の更新では反対側に存在する可能性があります。固定シミュレーション ステップを小さくすると役に立ちますが、これが唯一の答えではありません。移動範囲が障害物の厚さに比べて大きい場合は、スイープ セグメントまたは拡張ターゲットをテストします。

オブジェクトが多い場合は、まず粗いグリッドや空間分割を使って、互いに近づく可能性のないペアを除外します。その後、候補だけを詳しく判定します。この構造を加える前に計測してください。数十個程度のエンティティなら、単純な総当たりのペア判定のほうが保守しやすく、十分な場合があります。

## よくある質問

**ヒットボックスはスプライトのアウトラインと一致する必要がありますか?** 通常はそうではありません。少し寛容な長方形または円を使用すると、コントロールをより公平に感じることができます。開発中にヒットボックスを表示し、意図されたルールとプレイヤーの期待に合わせて調整します。

**Canvas は 2 つのスプライトが衝突するかどうかを教えてくれますか?** Canvasには、描画されたパスに対して点を判定する isPointInPath() などのパステストがありますが、ゲームオブジェクト全般の衝突ルールを定義するものではありません。シミュレーションで使う形状は明示し、描画処理から独立させてください。

## 気になることを、もっと

- [デルタタイムでカクつきのない動きを実現する](https://oneshotgems.ai/ja/topics/delta-time-in-games): 経過時間をゲームのモーションに適用し、安全なキャッチアップ ポリシーを選択し、さまざまなリフレッシュ レートおよび失速後の動きをテストします。
- [信頼性の高いブラウザ ゲーム ループを構築する](https://oneshotgems.ai/ja/topics/browser-game-loop): シミュレーション速度をプレイヤーのディスプレイのリフレッシュ レートに結びつけることなく、ブラウザ ゲームの更新とアニメーション フレームの周囲の描画を構造化します。
- [ゲームの物理学に固定タイムステップを使用する](https://oneshotgems.ai/ja/topics/fixed-timestep-game-physics): 固定シミュレーション ステップ、制限されたキャッチアップ作業、失速や衝突のテストによるレンダリングから物理的な更新を分離します。

## 関連情報

- [MDN: キャンバス isPointInPath()](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInPath)

---
正規ページ: https://oneshotgems.ai/ja/topics/game-collision-detection
