유니티의 Rigidbody는 물리 컴포넌트로
물리 충돌을 할 경우 Collision 이벤트를 발생시킨다.
이때 이 Collision 충돌 감지를
어떤 방식으로 처리할지에 대한 속성이
바로 Collision Detection 속성이다.

Collision Detection 속성은 4가지가 있고
기본 Discrete가 설정되어있다.
각 속성에 대한 이야기는 아래에서 하도록 하며
먼저 Collision 충돌 체크의 원리를 이야기해보겠다.

📌 Collision Detection을 상황에 맞게 써야하는 이유 - 충돌 누락, 터널링(Tunneling)
유니티에서는 Rigidbody가 움직일 때, 프레임마다 콜라이더 위치를 계산해서 충돌을 체크하고있다.
>> 매 프레임
1. 현재 위치 → 다음 위치 이동
2. 두 위치 사이에서 충돌이 있는지 확인
3. 충돌이 감지되면 → OnCollisionEnter 등 호출
1. 현재 위치 → 다음 위치 이동
2. 두 위치 사이에서 충돌이 있는지 확인
3. 충돌이 감지되면 → OnCollisionEnter 등 호출
여기서 만약 현재 프레임에서는 충돌이 되지 않았는데, 오브젝트의 속도가 너무 빨라 다음 프레임에서 충돌했어야 할 오브젝트를 건너 뛴 위치에 포지션값이 계산된다면 Collision 을 감지할 수 없게 된다. 이러한 현상을 충돌 누락(통과 현상, tunneling) 이라고 하며 빠르게 움직이는 물체에서 충돌 연산을 할 때 발생한다.
이럴때 Collision Detection 속성을 설정하여 프레임 사이의 경로까지 고려한 충돌 감지 방식을 선택할 수 있다.
📌 Collision Detection 속성
| 속성 | 설명 | 언제 사용하나요? |
| Discrete (기본값) | 프레임마다 단순 위치 체크 - 빠른 물체는 충돌 놓칠 수 있음 |
느리게 움직이는 물체 |
| Continuous | 이동 경로 상의 충돌 예측 |
총알, 화살처럼 빠른 물체가 정지된 벽과 충돌 |
| Continuous Dynamic | 본인과 상대의 이동경로상의 충돌 예측 |
빠르게 움직이는 물체끼리 충돌 ex) bullet끼리의 충돌 |
| Continuous Speculative | 예측 기반의 충돌 감지 - 움직이지 않아도 충돌 예측 (Rigidbody가 Sleep) - 위치 기반이 아닌, 형태(Shape) 기반으로 예측 - 유니티에서 가장 안전한 충돌 체크 방식 |
작거나 얇은 오브젝트 이동 경로가 예측 불가능한 오브젝트 |
💡 Continuous 모드들에 대해서 조금더 자세히 보자면?
1. Continuous
- 충돌 연산 원리
Rigidbody가 움직일 때, 현재 위치 → 다음 위치까지의 경로를 선분으로 가정하고
그 선분과 충돌체의 콜라이더가 겹치는지 계산한다. - 감지 대상 : 정적인 콜라이더
2. Continuous Dynamic
- 충돌 연산 원리
기본적으로 Continuous와 같으며 상대방의 경로까지 예측하여 충돌을 감지한다.
상대의 경로까지 예측해야하기 때문에 상대 오브젝트도 ContinuousDynamic 설정을 해줘야한다. - 감지 대상 : 정적, 동적 콜라이더 모두(Rigidbody가 있고 ContinuousDynamic설정이 되어있어야함)
3. Continuous Speculative
- 충돌 연산 원리
프레임이 바뀌기 이전에 앞으로 부딪힐 수도 있을 것 같은 상황을 예측(speculate) 해서 미리 충돌 처리를 시도한다.
때문에 가끔은 충돌 안 일어났는데 감지되는 false-positive 가능성이 있다. - 감지 대상 : 정적, 동적 콜라이더 모두
📌 주의할 점
- Continuous 모드들은 더 많은 연산을 요구하므로, 과도한 사용은 성능 저하를 일으킬 수 있다.
- Continuous 모드는 Rigidbody끼리 충돌하면 감지 안 될 수도 있다. → 이때 ContinuousDynamic 필요.
- Trigger와의 충돌에는 영향을 미치지 않는다. (OnTriggerEnter는 별개 시스템)

상황에 맞게 콜리션 디텍션을 설정하고
터널링을 방지하자!
하지만 컨티뉴어스를 남발하면...
성능이 매우 저하되니 진짜 필요한 곳에 설정하자!
wooj22 - Overview
🎮 Game Programmer. wooj22 has 22 repositories available. Follow their code on GitHub.
github.com
양우정
www.youtube.com
'Game Engine > Unity' 카테고리의 다른 글
| [Unity] 물리 머티리얼 (Physics Material) (0) | 2025.04.08 |
|---|---|
| [Unity] PlayerPrefs 클래스를 활용한 데이터 저장 (0) | 2025.04.08 |
| [Unity] 유용하게 활용되는 유니티 어트리뷰트(Attribute) 모음 (0) | 2025.04.08 |
| [Unity] 런타임에 Resources 폴더에서 바로 리소스 로드하기 (0) | 2025.04.08 |
| [Unity] 프로젝트 안에있는 머테리얼 컨버트 한번에 하는 법 (0) | 2025.04.02 |