TIL

[TIL] 250611 OnTriggerEnter2D 작동 조건

평생놀기 2025. 6. 11. 00:34

상황

타워 디펜스 게임을 만들다가 타워가 적을 감지하지 못하는 황당한 상황을 겪었다.

OnTriggerEnter2D 메서드가 아예 호출되지 않아서 몇 시간을 헤맸는데, 알고 보니 기본적인 설정들을 놓치고 있었다.

OnTriggerEnter2D 작동을 위한 필수 조건들

1. 컴포넌트 구성

감지하는 객체(타워)와 감지되는 객체(적) 모두에게 Collider2D가 필요하다.

그리고 감지하는 쪽의 Collider2D는 반드시 isTrigger = true로 설정해야 한다.

이 프로젝트의 경우에는 타워의 사거리(RangeDetector)가 트리거로 적을 감지해야 했다.

// 타워 (감지하는 객체)
✅ CircleCollider2D + isTrigger = true
✅ OnTriggerEnter2D 메서드

// 적 (감지되는 객체)  
✅ 아무 Collider2D (BoxCollider2D, CircleCollider2D 등)

 

2. Rigidbody2D의 중요성

가장 놓치기 쉬운 부분이다. 두 객체가 모두 Static Collider(Rigidbody2D 없음)이면 Trigger 이벤트가 발생하지 않는다. 둘 중 하나는 반드시 Rigidbody2D가 있어야 한다.

// 이렇게 하면 작동 안함
타워: Collider2D만 있음
적: Collider2D만 있음

// 이렇게 해야 작동함
타워: Collider2D만 있음  
적: Collider2D + Rigidbody2D ✅

 

3. Physics 2D 프로젝트 설정

Edit → Project Settings → Physics 2D에서 두 가지를 확인해야 한다:

  • Queries Hit Triggers: 체크되어 있어야 함
  • Layer Collision Matrix: 타워 레이어와 적 레이어가 상호작용하도록 설정

 

결론

OnTriggerEnter2D는 생각보다 까다로운 조건들이 많다.

특히 Static Collider끼리는 Trigger 이벤트가 발생하지 않는다는 점을 모르면 몇 시간씩 헤맬 수 있다.

문제가 생기면 Rigidbody2D부터 추가해보고, 그 다음에 Layer 설정을 확인하는 것이 가장 빠른 해결법이다.

Unity 물리 시스템은 직관적이지 않은 부분들이 있어서, 이런 기본기를 확실히 알아두는 것이 중요하다는 것을 다시 한번 깨달았다.