Collider
Collider는 GameObject의 보이지 않는 물리 경계입니다. Box·Sphere·Capsule로 형태를 정의하고 MeshCollider는 필요할 때만 씁니다. Trigger·Compound·Layer Matrix와 Material로 충돌·감지를 맞추는 가이드입니다.
상상해 보세요...
Collider는 물체 주변의 보호 버블과 같습니다. 수천 폴리곤 캐릭터의 모든 삼각형을 매 히트마다 검사할 수는 없습니다 — 너무 느립니다. Unity는 대신 단순한 형태(box, sphere, capsule)로 감쌉니다. 그 버블이 Collider입니다. 보이지 않지만 모든 충돌은 이를 통해 “느껴집니다”.
개념 자세히
Collider는 Unity Physics에서 GameObject의
물리 형태를 정의하는 컴포넌트입니다. 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에서 드래그하거나, Center·Size·Radius를 Inspector에서 바꿉니다.
Gizmo 색 확인
Collider는 대기 시 초록, 겹칠 때 빨강으로 그려집니다. Scene view에서 Gizmos를 켜세요.
Physics Material 추가(선택)
Create → Physics Material → Collider의 Material 슬롯에 할당해 마찰·탄성을 조절합니다.
Collision Matrix용 Layer 설정
Project Settings → Physics → Layer Collision Matrix: 어떤 Layer끼리 충돌할지 정해 불필요한 계산을 줄입니다.
인터랙티브 시뮬레이터
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가 who-hits-who 결정
⚠️ 흔한 실수
❌ 움직이는 몸에 Convex=false인 MeshCollider
non-convex MeshCollider는 Dynamic Rigidbody와 페어링 불가 — Unity 에러
✅ Convex를 켜거나 Compound Collider 사용
❌ 보이는 메시보다 Collider가 훨씬 작음
총알이 빗나간 것 같아도 피격 — 불공정하게 느껴짐
✅ Gizmos를 켜고 Collider 크기를 메시에 맞추기