Collider
Collider は GameObject を包む見えない形状で、Mesh の精密幾何を使わずに物理の衝突境界を定義します。Box・Sphere・Capsule・Mesh の選び方、Trigger、複合 Collider を学び、当たり判定を正しく設計できます。図解とシミュレーターで形状差を比べられます。
想像してみてください...
Collider は物体を包む保護の泡のようなものです。何千ポリゴンもあるキャラクターの 三角形すべてを毎回検査するのは遅すぎます。Unity は代わりに単純な形状 (箱・球・カプセル)で包みます。その泡が Collider です。見えませんが、すべての衝突はそれを通して「感じ」ます。
概念の詳細
Collider は GameObject の物理形状を Unity Physics で定義するコンポーネントです。
Mesh Renderer とは完全に独立——見た目なしの Collider(隠しゾーン)も、Collider なしの見た目(装飾)も可能です。
主な 3D タイプは BoxCollider、SphereCollider、
CapsuleCollider、MeshCollider です。
性能(速い順):
Sphere → Box → Capsule → Mesh。MeshCollider は Mesh を正確にコピーしますが重い——
ピクセル精度の地形や静的小物が必要なときだけ。移動キャラには通常 CapsuleCollider:
立位の体に合い、階段も滑らかに扱えます。
Collider は Trigger モード(
isTrigger = true)で、物理応答なしの重なり検知ができます。Trigger でないときは実接触力を生みます。
同一物体や子に複数 Collider を付けるのが
Compound Collider — MeshCollider なしで複雑な形を近似する定番です。
Unity 6 以降、Physics Shapes 2D と Physics Material を Collider に直接付け、 表面ごとの摩擦・弾みを制御できます。
Collider の種類
BoxCollider
直方体。速い。壁、床、箱に使う。
SphereCollider
球体。最速。弾、果物、丸い岩に使う。
CapsuleCollider
カプセル。直立キャラに最適。
MeshCollider
Mesh に正確に一致。最遅。静的物のみ。
Compound Collider
同じオブジェクト(または子)に複数の単純 Collider(Box + Sphere…)を組み合わせて複雑な形を近似 — MeshCollider より速く、単一形状より正確。
ハンズオン手順
適切な Collider タイプを選ぶ
Add Component → Physics → 物体の形に合わせて Box/Sphere/Capsule/MeshCollider を選びます。
Inspector でサイズを調整
"Edit Collider"(鉛筆アイコン)で Scene ビューをドラッグするか、Inspector で Center、Size、Radius を変更します。
Gizmo の色を確認
Collider は待機時に緑、重なり中は赤で描画されます。Scene ビューで Gizmos をオンにしてください。
Physics Material を追加(任意)
Create → Physics Material → Collider の Material スロットに割り当て、摩擦と弾みを調整します。
Layer で Collision Matrix を設定
Project Settings → Physics → Layer Collision Matrix:どの層が衝突するかを制御し、不要な計算を省きます。
インタラクティブシミュレーター
Collider タイプを選び形状を落として、地面や互いとの弾み方を観察しましょう。
コード例
基本実行時にスクリプトで Collider を読み取り・調整する。
using UnityEngine;
public class ColliderExample : MonoBehaviour
{
void Start()
{
// Get the Collider on this object
Collider col = GetComponent<Collider>();
// Inspect the Collider's world bounds
Debug.Log("Size: " + col.bounds.size);
Debug.Log("Center: " + col.bounds.center);
// Enable / disable the Collider
col.enabled = false; // Temporarily ignore collisions
col.enabled = true;
// Resize a BoxCollider specifically
BoxCollider box = GetComponent<BoxCollider>();
if (box != null)
box.size = new Vector3(2f, 1f, 2f);
}
}コード例
上級OverlapBox で箱内の物体を検出——Rigidbody 不要。
using UnityEngine;
// Find every body inside a box without a physical collision
public class AreaDetector : MonoBehaviour
{
public Vector3 detectionSize = new Vector3(5f, 5f, 5f);
public LayerMask targetLayer;
void Update()
{
// OverlapBox: all Colliders in the box, no Rigidbody needed
Collider[] hits = Physics.OverlapBox(
transform.position,
detectionSize / 2f,
transform.rotation,
targetLayer
);
foreach (Collider hit in hits)
{
Debug.Log("Detected: " + hit.name);
}
}
// Draw the detection volume in the Scene view
void OnDrawGizmosSelected()
{
Gizmos.color = new Color(0.2f, 1f, 0.2f, 0.3f);
Gizmos.DrawCube(transform.position, detectionSize);
Gizmos.color = new Color(0.2f, 1f, 0.2f, 1f);
Gizmos.DrawWireCube(transform.position, detectionSize);
}
}📌 要点
- ▸Sphere が最速;Mesh が最も正確で最遅
- ▸人型キャラの定番は CapsuleCollider
- ▸Compound = MeshCollider の代わりに複数の primitive
- ▸isTrigger=true → 接触力なしで検知
- ▸Layer Collision Matrix が誰と誰が当たるかを制御
⚠️ よくあるミス
❌ 移動体に Convex=false の MeshCollider
非凸 MeshCollider は Dynamic Rigidbody と組めない——Unity がエラー
✅ Convex を有効にするか、Compound Collider を使う
❌ 見た目のメッシュよりずっと小さい Collider
弾が外れたように見えても当たる——不公平に感じる
✅ Gizmos をオンにして Collider サイズをメッシュに合わせる