Unity에서는 두 물체가 서로 충돌하거나 트리거 영역에 들어갔을 때의 이벤트를 처리하기 위해 OnCollision 함수들과 OnTrigger 함수들을 제공한다.
OnCollisionEnter: 두 게임 오브젝트가 서로 충돌하면 처음으로 호출된다.
OnCollisionStay: 게임 오브젝트들이 서로 계속 충돌하고 있으면 매 프레임마다 호출된다.
OnCollisionExit: 두 게임 오브젝트가 서로 분리될 때 호출된다.
이 함수들을 사용하기 위해서는 둘 중 하나의 오브젝트에 Rigidbody 컴포넌트가 있어야 한다.
OnTriggerEnter: 하나의 게임 오브젝트가 트리거 콜라이더 영역에 들어오면 호출된다.
OnTriggerStay: 게임 오브젝트가 트리거 콜라이더 영역 내에 계속 있으면 매 프레임마다 호출된다.
OnTriggerExit: 게임 오브젝트가 트리거 콜라이더 영역에서 나올 때 호출된다.
OnTrigger 함수들을 사용하려면, 둘 중 하나의 오브젝트에 Rigidbody 컴포넌트가 있어야 하며, 트리거로 설정된 Collider 컴포넌트가 필요하다.
OnCollision 함수들과 OnTrigger 함수들의 주요 차이점은 그들이 어떻게 물리적 상호작용을 처리하고 반응하는지에 있다.
이 함수들은 두 오브젝트가 물리적으로 서로 접촉할 때 호출된다.
두 오브젝트는 실제로 서로를 밀거나 방해한다. 예를 들어, 만약 하나의 오브젝트가 벽에 부딪히면, 그 오브젝트는 벽을 통과할 수 없다.
OnCollision 이벤트를 받기 위해서는 충돌하는 둘 중 적어도 하나의 오브젝트에 Rigidbody가 있어야 한다.
이 함수들은 하나의 오브젝트가 다른 오브젝트의 트리거 영역 (Collider에서 'Is Trigger' 옵션을 활성화 한 영역) 에 들어갈 때 호출된다.
트리거는 물리적으로 오브젝트를 방해하지 않는다. 즉, 오브젝트는 트리거 영역을 통과할 수 있다. 이것은 종종 아이템 획득, 영역 진입/퇴장 감지 등의 게임 로직에서 유용하게 사용된다.
OnTrigger 이벤트를 받기 위해서는 트리거로 설정된 콜라이더가 필요하며, 둘 중 적어도 하나의 오브젝트에 Rigidbody가 있어야 한다.
요약하자면, OnCollision은 두 오브젝트가 서로 물리적인 접촉을 할 때 반응하며, OnTrigger는 오브젝트가 특정 영역에 들어가거나 나올 때 반응한다. OnCollision은 물리적인 방해가 존재하며, OnTrigger는 물리적인 방해가 존재하지 않음.