본문 바로가기
관/핫한 닷지 프로젝트 게임개발

닷지 게임제작 기초 10(충돌 편).

by 4차원 박스 2020. 7. 25.

유니티에서 충돌이란 무엇인지

확실하게 알아본다.

 

<유니티에서 충돌>

게임오브젝트 A,B가 서로 충돌한 상황 일때 게임오브젝트 A,B는 모두 자신이 충돌한 사실을 모른다.

그 대신 충돌했음을 알려주는 메시지가 A,B에 보내진다

충돌메시지를 통해 게임오브젝트와 해당 게임 오브젝트에 추가된 컴포넌트들은

충돌사실을 알게 되고 충돌에 대응하는 메서드를 실행함.

 

겜오브젝트와 컴포넌트 충돌종류에 따라 OnTriggerEnter 혹은 OnCollisionEnter 메시지를 받음.

 

Start, Update 메서드가 자동으로 실행되는 이유는 Start, Update 메시지와 같은 이름으로

메서드를 작성했기 때문임.

마찬가지로 충돌 메시지에 대응하려면 충돌 메시지와 같은 이름으로 메서드를 작성하면 된다.

 

충돌메시지엔 충돌한 상대 겜오브젝트의 정보도 함께 첨부된다

따라서 충돌한 상대방 겜오브젝트가 어떤 오브젝트인지 충돌메시지를 통해 알 수 있고 어떤 대응을 할지도 결정할 수 있다.

 

자동으로 충돌이 감지되므로 이를 위한 코드를 작성하지 않아도 된다.

충돌할 때 무엇을 할지 결정 해주기만 하면 된다.

 

<충돌메시지 발생>

근원은 리지드바디 컴포넌트이다, 즉 충돌이벤트 메서드를 사용 하기위해

서로 충돌중인 겜오브젝트 중 최소 하나의 겜오브젝트는 리지드바디를 가지고 있어야한다.

 

충돌메시지에 대응하는 메서드 = 충돌 이벤트 메서드라 한다.

 

<OnCollision 계열(일반충돌)>

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

충돌한 두 콜라이더는 통과하지 않고 서로 밀어냄.

 

OnCollisionEnter(Collision collision) = 충돌한 순간

OnCollisionStay(Collision collision) = 충돌하는 동안

OnCollisionExit(Collision collision) = 충돌후 분리되는 그 순간

 

OnCollision 계열 메서드가 실행될때는 메서드 입력으로 충돌 관련 정보가 Collision타입으로 들어온다.

Collision타입 = 충돌 관련 정보를 담아두는 단순 정보 컨테이너임 즉 입력으로 들어온 Collision을 통해

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

<OnTrigger 계열 (트리거 충돌)>

충돌한 두 겜오브젝트의 콜라이더중 최소하나가 트리거콜라이더 라면 자동으로 실행된다.

충돌한 두 겜오브젴은 충돌할때 그대로 통과함.

 

OnTriggerEnter(Collider other) = 충돌한 순간

OnTriggerStay(Collider other) = 충돌하는 동안

OnTriggerExit(Collider other) = 충돌후 분리되는 그 순간

 

OnTrigger 계열 메서드가 실행될 때는 메서드 입력으로 충돌한 상대방 게임 오브젝트의

콜라이더 컴포넌트가 Collider 타입으로 들어온다

앞에서는 Collision타입이었는데 여기서Collider타입을 입력받는 이유는

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

어차피 통과하기 때문에 반발력, 충돌지점, 충격량 등이 필요 없고

충돌한 상대방 게임오브젝트의 콜리이더 컴포넌트를 바로 받는다.

 

OnTrigger 계열의 메서드는 자신이 트리거 콜라이더가 아니더라도

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

메서드가 실행된다.

따라서 자신이 OnCollision이더라도 OnTrigger 계열의 충돌 이벤트 메서드가 실행된다.

댓글