OnTrigger , OnCollision 비교하기

 

Collider

유니티에서 충돌체크를 하기 위한

필요한 컴포넌트이다.

 

3D오브젝트를 생성하면 Collider가 자동적으로

추가 되어있다.

 

먼저 Trigger에 대해 살펴보자

1) void OnTriggerEnter(Collider other) : Trigger에 들어갔을 때

2) void OnTriggerStay(Collider other) : Trigger안에 있을때

3) void OnTriggerExit(Collider other) : Trigger를 벗어 날때

 

 

1) OnTriggerEnter


    void OnTriggerEnter(Collider other) 

{

if (other.gameObject.CompareTag ("Pick Up"))

{

other.gameObject.SetActive (false);

 

count = count + 1;

           

            SetCountText ();

            Debug.Log(count);

}

코드는 Roll a Ball 플레이 스크립트

Collider가 닿게 되면 아래 코드가 실행된다.

 

 

흰색 볼에 스크립트를 추가 하였다. 그리고 노란색 Cube에 닿을때 마다

왼쪽 상단에 Count 값이 증가되고 있는것을 볼수 있다.

 

 

2) OnTriggerStay

우선 // other.gameObject.SetActive (false); 

위 코드면 큐브가 사라진다.

Collider가 닿은 상태를 유지 하는 동안을 보기위해

주석 처리하고 실행했다.

 

Count가 닿는 동안 계속 증가하는것을 볼 수 있다.

그렇다면 Exit도 충분히 예상 가능하다.

 

 

3) OnTriggerExit

 

노란색 큐브를 닿는 순간에는 아무일이 일어나지 않지만

큐브를 지나쳐가는(벗어나는) 순간 Count가 올라간다.

 

OnTrigger를 알아봤는데 꼭 설정해 줘야하는것들이 있다.

노란색큐브와 흰색공에는 반드시 충동체크를 할수 있는 Collider가 있어야한다.

 

그리고 두 오브젝트중 하나는 Collider에 is Trigget에 체크가 되어있어야한다.

위 게임같은 경우에는 큐브에 체크가 되어있다. 흰색공에 체크 되어있지 않는 

이유는 is Trigger 가 체크가 되면 흰공에는 Rigidbody에 무게 값을 갖고있기 때문에

땅을 통과해 밑으로 사라져버린다.

 

 (하지만 여기서는 Cube에도 Rigidbody에 UseGravity에 체크되어있는데 땅으로 떨어지지 않고있다. Is Kinematic를 체크 하고있기 때문)

 

 

 

OnCollsion

void OnCollisionEnter(Collision other) : Collision에 들어 갔을 때

void OnCollisionStay(Collision other) : Collision과 충돌하고 있는 중

void OnCollisionExit(Collision other) : Collision과 충동에서 벗어 났을 때

 

 

Trigger와 함수의 기능은 똑같다

OnTrigger : 물리 연산 안함, 관통 가능, Collision 보다 연산이 적어서 효율적

OnCollision : 물리 연산을 통해 충돌 처리, 관통 X, 많이 사용하면 부하?.


여기서 주의할 점은 충돌 할 오브젝트들이 Rigidbody를 갖고 있다면오브젝트 모두 isTrigger가 언체크 되어있어야 하고 또,둘중 한 오브젝트는 Is Kinematic가 언체크 되어 있어야 한다.

 

 

반응형

+ Recent posts