
게임에서 핵심이 되는 로직 중 하나는 충돌 로직입니다.
오늘은 충돌을 처리하는 2가지 방법에 대해서 알아보겠습니다!
- OnCollision
- OnTrigger
1. OnCollision vs OnTrigger
충돌은 크게 물리적 충돌과, 논리적 충돌로 나눌 수 있습니다.
어떤 충돌을 사용 하느냐에 따라 사용해야 되는 함수가 다릅니다.
- 물리적 충돌 (벽, 바닥 등에 충돌, 오브젝트 간 충돌 등) = OnCollision
- 논리적 충돌 (아이템 획득, 특정 구역 진입 등) = OnTrigger
충돌 이벤트를 발생 시키기 위한 조건은 다음과 같습니다.
- 충돌과 관련한 오브젝트가 모두 충돌체(Collider)를 가지고 있을 것
- 충돌한 오브젝트 중 최소 하나가 Rigidbody 컴포넌트를 가지고 있을 것

2. OnCollision
OnCollision함수는 물리적 충돌이 발생했을 때 사용하는 함수입니다.
두 물체의 Collider에 isTrigger 변수가 false 상태인 상태에서 물리적 충돌이 일어나야 호출됩니다.
OnCollision 내에서도 충돌이 어떤 상태에서 발생 했는지에 따라 사용되는 함수가 다릅니다.
주요 함수
- OnCollisionEnter : 오브젝트가 충돌한 순간 1회 호출
- OnCollisionStay : 오브젝트가 닿아 있는 동안 계속 호출
- OnCollisionExit : 오브젝트가 닿아 있다 떨어진 순간 1회 호출
private void OnCollisionEnter(Collision collision)
{
// Ground 태그에 닿았는 지 확인
if (collision.gameObject.CompareTag("Ground"))
{
Debug.Log("땅에 닿음.");
}
}OnCollision함수 사용 시 ‘Collision’ 타입의 매개변수가 필요합니다.
해당 매개변수는 충돌한 대상의 데이터를 가져오는 역할을 합니다.
위 예제에서는 충돌한 대상 즉, 매개변수가 “Ground” 태그를 가지고 있는 지 확인하는 용도로 사용했습니다.
만약 2D 게임을 개발 중이시고, 충돌체와 Rigidbody가 2D 라면 ‘OnCollisionEnter2D’ 함수와 매개변수를 ‘Collision2D‘로 사용해주시면 됩니다.
앞으로 나올 OnTrigger와 Enter 외 Stay, Exit 모두 함수와 매개변수 뒤에 ‘2D‘를 붙여주시면 2D게임에서 사용하실 수 있는 충돌 이벤트 함수가 됩니다.
3. OnTrigger
OnTrigger함수는 논리적 충돌 즉, 트리거 구현에 사용 될 충돌에 사용되는 함수입니다.
두 물체 중 하나 이상의 Collider에 isTrigger 변수가 ‘true’여야 해당 함수가 호출될 수 있습니다.

OnCollision과 마찬가지로 조건에 따라 3가지의 함수가 사용됩니다.
주요 함수
- OnTriggerEnter : 오브젝트가 겹친 순간 1회 호출
- OnTriggerStay : 오브젝트가 겹쳐있는 동안 계속 호출
- OnTriggerExit : 오브젝트가 겹쳐있다 떨어진 순간 1회 호출
private void OnTriggerEnter(Collider other)
{
// Item 태그를 가진 오브젝트와 겹칠 경우 처리
if (other.CompareTag("Item"))
{
Debug.Log("아이템 획득");
// 아이템 삭제
Destroy(other.gameObject);
}
}OnTrigger또한 매개변수를 통해 겹쳐진 오브젝트의 데이터를 받아올 수 있습니다.
다만, OnColiision과 다르게 ‘Collider’타입을 매개변수로 받습니다.
위 예제의 경우는 Item태그를 가진 오브젝트와 겹칠 시 로그를 출력하고 해당 오브젝트를 제거하는 로직입니다.



