728x90

 

유니티에서 빠질 수 없는 기능 OnCollision과 OnTrigger 둘다 비슷해보이는데 무슨 차이가 있을까요?

 

공통점

오브젝트간의 충돌을 체크할때 사용되는 함수이다.

 

충돌하는 두 오브젝트가 컴포넌트에 Collider 를 가지고 있어야한다 .

-두 오브젝트의 Collider가 Box Collider , Capsule Collider 등 어떤 형태로든 콜라이더를 가지고 있어야합니다.

 

하나의 오브젝트는 Rigidbody를 가지고 있어야한다.

-충돌하는 오브젝트 중 하나는 컴포넌트에 Rigidbody 를 가지고 있어야합니다

 

차이점

 

둘 중 하나의 오브젝트는 Collider에 Is Trigger가 체크 되어 있어야한다

-Is Trigger가 체크되면 해당 오브젝트가 물리적으로 영향을 받지 않고 통과가 됩니다

 

 

 

OnCollision


OnCollisionEnter (Collider collision)

▶오브젝트간 충돌이 처음 일어났을때 한번 호출

플레이어가 점프했을때 "바닥에 닿는 순간 한번" 호출된다고 할 수 있겠습니다.

 

OnCollisionStay (Collider collision)

▶오브젝트간 충돌이 일어나고 있다면 계속해서 호출

플레이어가 "바닥과 닿아있다면 계속해서" 호출된다고 할 수 있겠습니다.

 

OnCollisionExit (Collider collision)

▶오브젝트가 충돌중이다 떨어졌을때 한번 호출

플레이어가 "바닥과 닿아있다가 점프를 하는 순간 한번" 호출된다고 할 수 있겠습니다.

 

만약 2D플랫폼에서 사용된다고 하면 뒤에 2D를 붙여 사용하면됩니다.

ex) OnCollisionEnter2D

 

그런데 Collider collision이부분은 무엇을 의미할까요?

바로 스크립트가 적용된 오브젝트와 충돌한 물체의 정보를 받아오는것입니다.

 

A오브젝트에 OnCollision 함수가 있는 스크립트를 적용시켰고 B라는 물체와 충돌했다면 B물체의 정보를 받아오게 됩니다.

이것을 활용하여 충돌한 오브젝트의 태그나 다양한 정보를 알 수 있습니다.

ex) collision.transform.tag //충돌한 물체의 태그를 알 수 있다

 

OnTrigger


OnTriggerEnter(Collider other)

▶오브젝트간 충돌이 처음 일어났을때 한번 호출

 

OnTriggerStay(Collider other)

▶오브젝트간 충돌이 일어나고 있다면 계속해서 호출 

 

OnTriggerExit(Collider other)

▶오브젝트가 충돌중이다 떨어졌을때 한번 호출

 

둘다 역할이 똑같아 보이는데 어떤 상황에 어떤 함수를 사용해야 할까요?

 

만약 바닥과 충돌체크를 한다고 가정해보겠습니다 

 

바닥에 IsTrigger가 체크되어있다면 플레이어는 바닥을 밟지 못하고 그대로 통과해 떨어지게 됩니다

이런 상황에는 OnCollision을 사용하면되고

플레이어가 총알을 쐇을때 오브젝트를 관통시키고싶다

이런상황에서는 OnTrigger를 사용하면 됩니다

 

[Unity 3D]유니티3D : 점프 1번만 하기 구현 :: 매일개발자 (tistory.com)

 

[Unity 3D]유니티3D : 점프 1번만 하기 구현

대부분의 게임에 들어가는 기능인 JUMP를 넣어보겠습니다. 오브젝트는 큐브나 캡슐 등 어떤 것을 사용해도 괜찮습니다 오브젝트에 Rigidbody 컴포넌트 추가 점프 기능을 추가할 오브젝트를 Hierarchy

wookeee.tistory.com

 

위 바닥 충돌 체크 함수에서 OnCollision으로 한번 변경해봤습니다.

 

728x90

+ Recent posts