[Unity] 콜라이더 (Collider) 정리

Lumos Velog·2025년 7월 16일
0

콜라이더(Collider)?

유니티에서 콜라이더(Collider)는 오브젝트 간의 충돌을 감지하기 위해 사용하는 컴포넌트이다. 물리적인 충돌이나 트리거 이벤트를 처리할 때 필수적으로 사용된다. 콜라이더는 3D와 2D에서 각각 다르게 제공되며 대부분 비슷한 형태로 2D 라는 이름만 붙게 된다.




Box Collider
직육면체 형태의 콜라이더로, 박스 모양의 오브젝트에 주로 사용된다.


Sphere Collider(Circle Collider 2D)
구 형태의 콜라이더로, 구형 오브젝트에 적합하다.


Capsule Collider
캡슐 형태의 콜라이더로, 주로 캐릭터와 같은 길쭉한 오브젝트에 사용된다.


Mesh Collider
임의의 메쉬 형태를 콜라이더로 사용할 수 있다. 당연히 메쉬가 필요하고 복잡한 형태의 오브젝트도 처리할 수 있는 장점이 있지만, 성능 이슈가 있을 수 있으므로 신중하게 사용해야 한다.


Terrain Collider
Terrain(지형) 오브젝트 전용 콜라이더로 3D 대규모 지형에만 사용된다.


Wheel Collider
실제 자동차 바퀴의 물리 구현을 위한 특수 콜라이더로 자동차나 오토바이 등 차량 바퀴의 물리 구현을 한다.
Suspension, Friction 등 바퀴 물리 세부 조정 가능하다.


Tilemap Collider 2D
2D 타일맵 전용 콜라이더로, 그려진 타일맵을 각각 충돌처리를 가능하게 해준다.




주요 속성

Is Trigger
이 옵션을 활성화하면 콜라이더는 물리적인 충돌 대신 트리거 이벤트만 발생시킨다. 주로 플레이어가 특정 영역에 진입했는지 확인할 때 사용된다.


Material
물리적인 반응(마찰, 반발력 등)을 조정할 수 있는 Physic Material을 지정할 수 있다. 미끄러운 얼음 바닥, 고무 공처럼 튕기는 물체 등을 구현할 때 사용할 수 있다.


Center/Offset
콜라이더의 위치(오브젝트 기준 상대적 위치)를 조정한다. 오브젝트의 실제 중심과 콜라이더의 중심이 다를 때 보정하게 되는데 그때 그때 오프셋이 다른것보단 어떠한 오브젝트 구조에 대한 규칙을 정하고 사용하는게 좋고 그게 아니라면 스프라이트나 메쉬에 의존하는게 오히려 좋을 수 있다.


Size/Radius/Height/Direction
콜라이더의 크기(박스, 구, 캡슐 등), 방향(축) 지정. 콜라이더의 종류에 따라 맞는 속성이 존재한다.


Convex (Mesh Collider 전용)
체크 시, 콜라이더를 볼록체(Convex Hull)로 단순화한다.Rigidbody와 함께 쓸 경우 반드시 Convex를 활성화해야 한다.


Shared Mesh (Mesh Collider 전용)
충돌 영역으로 사용할 메쉬(모델)를 지정. 커스텀 메쉬를 콜라이더로 사용할 때 사용 할 수 있다.



Rigidbody의 관계

콜라이더는 오브젝트의 충돌 영역을 정의하지만, 실제 물리 연산(중력, 힘 등)을 적용하려면 Rigidbody 컴포넌트가 추가로 필요하다.

Rigidbody 미포함: 오브젝트는 정적(Static) 오브젝트로 취급되어 움직이지 않으며, 충돌 시 반응만 감지한다.

Rigidbody 포함: 오브젝트는 동적(Dynamic) 오브젝트가 되어 물리 엔진의 영향을 받는다.




트리거 이벤트

콜라이더에 Is Trigger가 활성화된 경우, 물리적인 충돌 없이 특정 영역에 오브젝트가 진입하거나 나가는 것을 감지한다. 또 트리거와 트리거 끼리는 이벤트가 발생하지 않고 한쪽에는 반드시 리지드바디가 있어야한다.
사용에 따라 꽤 많은 방향으로 사용 할 수 있으나 3D 프로젝트의 경우 정확한 감지를 위해 다른 방법이 더 사용 될 수 있다.

void OnTriggerEnter(Collider other)
void OnTriggerStay(Collider other)
void OnTriggerExit(Collider other)



주의사항

콜라이더를 포함한 물리연산은 FixedUpdate 에서 이루어진다. 그렇기에 예를들어 캐릭터의 이동로직을 Update에서 처리하고 콜라이더로 이루어진 오브젝트 방향으로 이동하게 되면 Update에서는 이동을 처리하고 FixedUpdate 에서 다시 막게 되는데 이 주기가 맞물리지 않아 캐릭터가 버벅이게 되는 현상은 초보 개발자가 가장 흔하게 볼 수 있는 실수이다.
그래서 명확한 타이밍을 요구하는 물리적 결과를 원할때 Monobehavior 의 주기에 대한 명확한 이해가 필요하고 사용하는게 중요하다.

0개의 댓글