본문 바로가기

Unity

Unity Ch7 - Collider, OnCollision, OnTrigger

 

Collider(콜라이더)

오브젝트에 물리적인 표면을 만든다

콜라이더가 있으면 콜라이더를 가진 다른 오브젝트와 충돌할 수 있다

 

 

트리거 콜라이더(Is Trigger✓)

충돌한 물체를 밀어내는 물리적인 표면이 없다

따라서 겹치거나 서로 통과해 지나갈 수 있고 충돌 자체를 감지한다

- 플레이어가 특정 영역으로 진입했는지 감지할 때 

- 충돌이 감지되었을 때 어떤 기능을 실행하는 방아쇠로 사용

 

 

충돌 이벤트 메서드

콜라이더를 가진 게임 오브젝트는 자신이 충돌한 사실을 스스로 알 수 없다

그 대신 Rigibody 컴포넌트가 각 오브젝트에게 '충돌했다'는 메시지를 보낸다

이때 충돌한 상대 오브젝트에 대한 정보도 함께 전달한다

 

 

메시지의 종류

- OnTriggerEnter

- OnCollisionEnter

- 등등

 

Rigidbody 컴포넌트가 충돌 메시지를 발생시키므로 
이를 사용하려면 서로 충돌 중인 게임 오브젝트 중에서 최소 하나의 오브젝트는
Rigidbody 컴포넌트를 들고 있어야 한다.       

 

 

 

OnCollision: 일반 충돌

일반 콜라이더를 가진 두 게임 오브젝트가 충돌할 때 자동으로 실행

충돌한 두 콜라이더는 서로 밀어낸다.

OnCollisionEnter(Collision collision) : 충돌한 순간 
OnCollisionStay(Collision collision) : 충돌하는 동안
OnCollisionExit(Collision collision) : 충돌했다가 분리되는 순간

 

 

OnTrigger: 트리거 충돌 

충돌한 게임 오브젝트의 콜라이더 중 최소 하나가 트리거 콜라이더라면 자동으로 실행

충돌한 두 콜라이더는 서로 통과한다.

OnTriggerEnter(Collider other) : 충돌한 순간
OnTriggerStay(Collider other) : 충돌하는 동안
OnTriggerExit(Collider other) : 충돌했다가 분리되는 순간

 

 

Collision 타입 

OnCollision 게열 메서드가 실행될 때는 충돌한 오브젝트 정보가 Collision 타입으로 넘어온다

Collision 타입은 충돌 관련 정보를 담아두는 단순한 컨테이너

충돌한 상대방 게임 오브젝트, 충돌 지점, 충돌 표면의 방향 등을 알 수 있다.

 

 

Collider 타입 

Collider 컴포넌트. 즉 충돌한 상대방 게임 오브젝트의 콜라이더 컴포넌트

 

 

OnTrigger 계열 메서드에서 Collider 타입을 받는 이유는?

트리거 충돌에는 상세한 충돌 정보가 필요 없기 때문

트리거 충돌은 일반 충돌과 달리 서로 밀어내지 않고 그대로 통과한다

따라서 정확한 충돌 지점, 충격량 등이 존재하지 않으므로 충돌한 상대방 게임 오브젝트의 Collider 컴포넌트를 곧장 받는다.

 

 

OnTrigger 계열 메서드는 자신이 Trigger 콜라이더가 아니어도 실행된다 

충돌한 두 콜라이더 중 하나 이상이 트리거 콜라이더일 때 양쪽 모두에서 OnTrigger 계열 메서드가 실행된다.

따라서 일반 콜라이더를 가진 게임 오브젝트라도 충돌한 상대 게임 오브젝트가 트리거 콜라이더라면 

양쪽 오브젝트 모두에게 OnCollision이 아닌 OnTrigger 계열의 충돌 이벤트 메서드가 실행된다