본문 바로가기

프로그래밍/Unity

유니티 충돌 처리 방법 Collision Collider

유니티에서 오브젝트간의 충돌을 처리하는 방법에는 두 가지가 있다. 첫번째는 trigger에 의한 방법, 그리고 collision을 이용한 방법이 있다. 둘은 비슷한 용도로 쓰이지만 알고 보면 전혀 다름 개념인데, 이 글에서는 그중 collision을 이용한 방식을 소개하려 한다. 그럼, 유니티에서는 어떻게 충돌에 대한 이벤트를 처리하는지 알아보도록 하자.



Collision을 이용한 충돌판정


일반적으로 생각하는 '충돌'에 관한 판정을 Collision이라는 기능이 해준다. 충돌 하면 두개의 오브젝트가 서로 부딪쳐서 튕기고.. 움직이고 그런 것을 생각할 것이다. 맞다. Collision은 물리적인 계산들을 모두 진행한다. 그 상태에서 충돌판정을 하는 것이다.


하지만 이런 특징 때문에 약간의 제한이 있는데, 충돌판정의 기준이 모호해진다는 것이다. 이런 것 때문에 Collision에서는 따로 기준을 정해서 그곳에 들어가면 충돌인 것으로 판정을 한다.


그러면, 이 공간은 어떻게 지정해야 될까?



이런식으로 오브젝트를 선택한 후, 옆에 탭에 기본적으로 있는 "Colider" 부분에서 "Edit Colider" 옆에 있는 버튼을 눌러 주자.




그러면 이렇게 초록색 점들이 생기게 된다. 이제, 이 점들을 끌어서 충돌판정의 범위를 지정해 주면 된다. (끌어당겨서 영역을 넓히거나 좁힐 수 있다.)




이런식으로 원하는 곳을 끌어서 더 넓혀 주면 저 곳에 다른 오브젝트가 겹칠 시에 '충돌했다' 라는 이벤트가 발생하게 된다.



1
2
3
void OnCollisionEnter(Collision collision){
    Destroy(collision.gameObject);
}
cs


그래서, 충돌을 핸들링하고 있는 물체에 포함되어있는 스크립트에다가 이런 리스너들을 추가해주면 된다.


OnCollisionEnter는 닿기 시작한 순간, OnCollisionStay는 닿아 있을때마다 실행하고, OnCollisionExit는 그 구역에서 오브젝트가 더이상 닿아있지 않게 됬을때 발동한다. 인수로는 어떤 오브젝트와 부딪혔는지 알려주는 Collision 객체가 있다.


위 스크립트는 자신과 부딪힌 무언가를 Destroy 함수로 없애는 코드다.



필자는 위에 떠있던 큐브에 Rigidbody를 설정해 놨기 때문에, 떨어지면서 Collider 영역에 오브젝트가 들어가고 그렇게 들어간 오브젝트가 삭제되어 땅이 없어져 버린다.


성공적으로 작동한 것이다!




이거 외에도 유니티의 충돌 처리에는 하나 더 남아 있는데, 그 기능은 다른 글에서 따로 소개해 주도록 하겠다. 그럼 여기까지!