터널링(Tunneling)이란?
터널링은 게임 물리나 충돌 처리에서 발생하는 문제로, 빠르게 움직이는 객체가 충돌 판정을 놓쳐서 다른 객체를 "통과"해 버리는 현상을 말합니다.
왜 발생하나요?
충돌 검사는 일반적으로 프레임 단위로 수행됩니다.
즉, 매 프레임마다 객체의 위치를 확인해 충돌 여부를 판단하는데,
만약 물체가 너무 빨리 움직이면 다음 프레임에서 이동한 거리가 너무 멀어져서
중간에 있던 충돌 대상과 겹치는 순간을 놓칠 수 있습니다.
예를 들어,
- 1번 플레이어가 2번 플레이어를 향해 총알을 쐈는데
- 총알이 매우 빠르게 이동해서 한 프레임에서는 총알 위치가 플레이어 앞에 있고,
- 다음 프레임에서는 플레이어를 완전히 지나쳐 버려서 충돌이 인식되지 않는 상황이 됩니다.
이때 총알은 플레이어를 "뚫고" 지나가게 되어 실제로는 맞았어야 할 공격이 무시되는 셈이죠.
즉
프레임마다 총알 위치랑 상대 플레이어 위치를 검사하는데,
총알이 너무 빨리 이동해서 한 프레임에는 플레이어 앞에 있고, 다음 프레임에는 이미 플레이어를 지나가 버려서
충돌 위치를 '건너뛰는' 거지.
그래서 충돌 처리가 안 되는 거야. 이게 바로 터널링 현상이다.
터널링 문제 예시
프레임
1: 총알 위치 (x=0) 프레임
2: 총알 위치 (x=20) 충돌 대상 위치: (x=10 ~ x=15)
총알이 프레임 1에서 x=0에서, 프레임 2에서 x=20으로 점프 이동하면,
x=10~15 위치에 있는 적과 겹치지만, 충돌 검사 시에는 총알이 그 위치를 '통과'했기 때문에 충돌이 감지되지 않습니다.
해결 방안
- 연속 충돌 검사 (Continuous Collision Detection, CCD) : Unity -> rigidbody.continuous mode
- 물체가 이동한 경로를 따라 충돌을 체크합니다.
- 즉, 점이 아닌 선이나 궤적을 기준으로 충돌을 판단해서 지나침을 막습니다.
- 속도 제한 : 물체의 이동 속도를 제한하여 프레임 간 너무 멀리 이동하지 않도록 조절합니다.
- 물리 시뮬레이션 프레임 속도 증가 : 물리 계산 주기를 더 세밀하게(더 자주) 해서 충돌 인식 확률을 높입니다.
- 레이캐스트(Raycast) 활용 : 총알 등 빠른 물체는 이동 경로에 레이캐스트를 쏴서 충돌을 미리 감지합니다.
터널링 현상 정리
- 빠른 속도로 움직이는 물체가 충돌 대상을 '뚫고' 지나가는 문제
- 게임 내에서 총알, 캐릭터 이동, 물리 오브젝트 등에서 자주 발생
- CCD, 속도 제한, 물리 계산 빈도 조절 등으로 해결 가능
728x90
'네트워크' 카테고리의 다른 글
게임 네트워크 (1) | 2025.05.31 |
---|---|
Lockstep Server (2) | 2025.05.26 |
gRPC (1) | 2025.01.16 |
RESTful API (0) | 2025.01.16 |
TCP, UDP 차이점 (0) | 2024.04.19 |