두 함수 모두 충돌체크를 하기위해 사용하는 유니티 제공 함수입니다.
공통점으로는 상황에 따라 쓸 수 있는 Enter, Stay, Exit 3가지 종류가 있습니다.
각 기능은 간단하게 정리해보면 다음 표와 같습니다.
종류 | OnTriggerEnter OnCollisionEnter |
OnTriggerStay OnCollisionStay |
OnTriggerExit OnCollisionExit |
기능 | Collider간 최초 충돌시 호출 | Collider간 충돌시 매 프레임 호출 | Collider간 충돌이탈시 호출 |
각 필요한 상황에 따라 골라 사용하면 되는 편리한 기능인데, OnTrigger와 OnCollision 사이에는 차이점이 한가지 있습니다.
OnTrigger 함수는 충돌하는 두 물체에 Collider 컴포넌트가 존재해야 하며,
두 물체중 1개이상의 Collider 컴포넌트에 IsTrigger가 활성화 되어있어야 합니다.
OnCollision 함수 또한 충돌하는 두 물체에 Collider 컴포넌트가 존재해야 하며,
두 물체의 Collider 컴포넌트에 있는 IsTrigger는 비활성화 되어있어야 합니다.
IsTrigger 를 활성화 하게 될 경우, 활성화된 물체는 물리엔진으로부터 무시됩니다.
따라서 물리적 충돌할 필요가 없는 경우엔 OnTrigger 함수를,
물리적으로 충돌해야하는 경우엔 OnCollision 함수를 사용하면 됩니다.
예를 들어, 캐릭터가 땅에 닿아있을 때에만 점프가 가능하도록 설계하고 싶을 때에는 다음과 같이 사용했습니다.
private void OnCollisionEnter(Collision collision)
{
if (collision.collider.tag == "Ground")
{
isJumping = false;
}
}
땅의 Tag를 Ground로 설정후, 플레이어와 닿은 Collider의 Tag가 땅일 경우에만 점프가 가능하도록 설정해주면 됩니다.
예시가 적절하지 못했을수도 있지만, OnTrigger 함수와 OnCollision 함수의 차이점은 크게 어렵지 않으므로 무난하게 사용가능할 것입니다.
댓글