게임 물리에서 물체가 너무 빠르게 이동한 나머지, 충돌체를 그대로 통과해버리는 현상이 있습니다.
게임은 프레임 단위로 세상을 시뮬레이션합니다.
만약 물체의 속도가 너무 빨라서 '1프레임 동안 이동한 거리'가 '장애물의 두께'보다 커지게 되면, 물리 엔진은 두 물체가 부딪혔다는 사실을 인지하지 못한 채 다음 위치로 물체를 이동시켜 버립니다.
이런 현상을 터널링이라고 부릅니다.
최근 작업 중인 글라이드(Glide) 시스템에서 이 문제가 터졌습니다. 다이브의 박진감을 살리기 위해 가속도를 대폭 높였더니, 캐릭터가 얇은 레이저 장애물을 그냥 통과해 바닥까지 내려가는 모습이 관찰되었습니다.

저는 아래의 방법으로 터널링 문제를 해결했습니다.
위치 예측: 현재 캐릭터의 속도와 가속도를 공식에 대입하여, 다음 프레임에 캐릭터가 위치하게 될 지점(NextPosition)을 계산합니다.
경로 추적: 현재 위치에서NextPosition사이의 경로를 따라 광선(Ray)을 발사합니다.
충돌 판별: 레이 발사 결과, 현재 위치와 다음 위치 사이에 장애물(레이저 등)이 감지되면 즉시 충돌 이벤트를 발생시키고 캐릭터의 위치를 조정합니다.
결과

이제 고양이는 자유롭지 못하게 되었지만, 게임은 더 재미있어 질 것을 기대합니다
댓글 0개
첫 번째 댓글을 작성해 보세요!