빠른 비교
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("Player entered");
}
}갈리는 기준
Collision vs Trigger 선택 기준
Collision은 오브젝트가 실제로 부딪히고 물리 반응이 있어야 하는 상황에 씁니다. 예를 들어 바닥에 착지하거나 벽에 튕기는 경우가 대표적입니다. Trigger는 물리 반응 없이 영역 진입과 이탈만 감지하면 충분한 상황에 적합합니다. 아이템 획득 범위, 대화 유발 영역, 체크포인트처럼 오브젝트를 통과시키면서 이벤트만 받으면 될 때 Is Trigger를 켭니다. 핵심 차이는 콜백 이름이 아니라 Collider 설정과 물리 반응 유무에 있습니다.
Rigidbody 조건과 콜백 안정성
물리 콜백이 발생하려면 두 오브젝트 중 적어도 하나에 Rigidbody가 있어야 합니다. OnCollisionEnter/Stay/Exit와 OnTriggerEnter/Stay/Exit는 각각 한 세트입니다. 진입 시점만 감지할지, 머무는 동안도 봐야 할지, 이탈 시 정리가 필요한지를 먼저 정하고 적절한 콜백을 선택하는 것이 좋습니다. 아래는 충돌 시 벽 반동 횟수를 세는 예입니다.
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Wall"))
{
bounceCount += 1;
}
}2D와 3D API 혼용 주의
2D 물리에는 OnCollisionEnter2D, OnTriggerEnter2D처럼 별도 API가 있습니다. 3D Collider와 2D Collider는 서로 반응하지 않으므로, 2D 프로젝트에서 3D 콜백을 쓰거나 그 반대로 혼용하지 않도록 주의해야 합니다. 콜백이 전혀 호출되지 않을 때는 코드보다 설정을 먼저 확인하는 편이 훨씬 빠릅니다.
선택 기준
| 상황 | 선택 |
|---|---|
| 물리 반응이 필요함 | OnCollision... |
| 영역 진입/이탈 감지 | OnTrigger... |
| Collider가 통과 가능해야 함 | Is Trigger 켜기 |
| 2D 물리 | ...2D 계열 콜백 사용 |
| 태그 비교 | CompareTag("Player") |
| 콜백이 안 뜰 때 | Rigidbody, Collider, Layer 설정 먼저 확인 |
| 비교 | 더 잘 맞는 쪽 | 이유 |
|---|---|---|
| 실제 물리 충돌 vs 영역 감지 | OnCollision... / OnTrigger... | 튕김과 접촉 정보가 필요한지 여부 |
| 3D 물리 vs 2D 물리 | OnCollisionEnter / OnCollisionEnter2D | 콜백과 컴포넌트 계열이 완전히 다름 |
| 충돌 처리 vs 충돌 필터링 | 코드 / Layer Matrix | 물리 호출 자체를 막을지, 들어온 뒤 처리할지 다름 |
주의할 점
콜백이 호출되지 않으면 코드보다 설정을 먼저 확인하세요.
// ❌ 콜백이 없을 때 코드부터 의심 — 대부분 설정 문제
// ✅ 체크리스트 순서대로 점검:
// 1. 두 오브젝트 중 최소 하나에 Rigidbody가 있는가?
// 2. Is Trigger 설정이 의도한 대로 켜져/꺼져 있는가?
// 3. 오브젝트가 비활성(SetActive false) 상태가 아닌가?
// 4. Physics Layer Collision Matrix에서 두 레이어가 충돌하도록 설정됐는가?
// 5. 2D 오브젝트에 3D 콜백(OnCollisionEnter)을 쓰고 있진 않은가?// ❌ Trigger로 체크포인트를 만들었는데 Rigidbody가 전혀 없음
Player: Collider만 있음
Checkpoint: Is Trigger Collider만 있음
→ 콜백 안 옴참고 링크
3 sources