[C#, 유니티] 08. Rigidbody와 Collider : 물리적 충돌에 관하여

2022. 7. 8. 18:49코딩 2막 <C#개념편>

728x90

게임을 하다보면 플레이어가 물체와 부딪혔을때

충돌이 일어나는 것을 보았을 것이다

충돌

충돌이란 개념에 대해서 정확히 짚어보자

리지드바디(Rigidbody) 는 게임 오브젝트의 물리적 동작을 가능하게 하는 주요 컴포넌트이다.

리지드바디가 연결된 오브젝트는 중력에 즉시 반응한다

Collider 컴포넌트도 하나 이상 추가할 경우 게임 오브젝트가 당하는 충돌에 의해 움직인다.

 

콜라이더(Collider) 컴포넌트는 물리 충돌 처리를 위한 오브젝트의 형태를 말한다.

콜라이더는 보이지 않는 요소이므로 오브젝트의 메시와 정확히 동일한 모양일 필요는 없으며,

실제로는 게임플레이 시에는 대략적인 근사치로도 크게 구분되지 않으며 더 효율적이다.

콜라이더를 트리거(Trigger)(Is Trigger 프로퍼티 사용)로 설정하면

이 콜라이더는 솔리드 오브젝트로 동작하지 않으며 그저 다른 콜라이더가 통과하도록 허용한다. 


그럼 스크립트 상에서 어떤 이벤트 함수를 써야 충돌이 되는지 코드를 확인해보자

 

트리거 충돌이 일어날 경우 다른 콜라이더가 이 콜라이더의 공간에 들어오면,

트리거는 트리거 오브젝트의 스크립트에 있는 OnTriggerEnter 함수를 호출한다.

 

충돌이 감지되었을 때 가장 먼저 일어나는 물리 업데이트는 OnCollisionEnter 함수 호출이다.

접촉이 지속되는 상황에서는 업데이트 동안 OnCollisionStay 함수가 호출되며,

마지막으로 이 접촉 상태가 종료되었음을 나타내는 OnCollisionExit 함수가 호출된다.


그럼 이제 유니티 상에서 충돌하는 두개의 Ground를 생성해 놓고

Player와의 충돌을 가정하여보자

 

예상컨데 Player의 경우 Rigidbody가 있어 중력에 의해 아래로 떨어지려 할 것이다

Player의 Rigidbody의 유무와 Collider의 상태에 따라, 그리고 마찬가지로

Ground의 Rigidbody의 유무와 Collider의 상태에 따라 충돌의 다양한 결과를 도출한다(경우의 수)

두 피사체의 인스펙터를 확인해보자

먼저 Player의 경우 Rigidbody가 존재하고 Trigger가 꺼진 Collider이므로

이를 Rigidbody Collider 라고 부른다

그럼 충돌을 당하는 Ground의 인스펙터는 어떻게 설정해 볼까

편의상 위의 Ground를 UpGround라고 지명했다

UpGround의 경우 Rigidbody가 없고 Trigger가 켜진 Collider이므로

이를 Static Trigger Collider 라고 부른다

그럼 아래에 있는 DownGround의 경우는 어떻게 될까?

DownGround의 경우 Rigidbody가 없고 Trigger가 꺼진 Collider이므로

이를 Static Collider 라고 부른다

 

이와 같은 상황이라면 과연 어떤 충돌의 경우의 수가 나타날까?

바로 출력해보자

 

 

결과는 UpGround의 경우 트리거 충돌이 일어났고

DownGround의 경우 콜리전 충돌이 일어났다

 

한눈에 정리하기!!


피사체 간 충돌에는 다양한 경우의 수가 존재한다

그것을 한눈에 보기 좋게 표로 만들었다

이름하여 충돌 액션 메트릭스!!!

충돌 액션 메트릭스

 


공감해주셔서 감사합니다

728x90