총알이 적에게 맞고, 캐릭터가 벽에 막히고, 상자가 떨어져 바닥에서 튕기는 일은 모두 충돌 처리와 물리 엔진이 맡습니다. 게임 엔진에는 물리 엔진이 들어 있어 직접 공식을 쓰지 않아도 되지만, 기본 원리를 모르면 이상한 버그를 만났을 때 손을 쓰기 어렵습니다. 이 글은 충돌 처리와 물리 엔진의 기초 개념을 정리합니다.
충돌 처리의 두 단계
충돌 처리는 보통 두 단계로 나뉩니다. 첫 번째는 '부딪혔는가'를 알아내는 충돌 감지이고, 두 번째는 '부딪혔으면 어떻게 할 것인가'를 정하는 충돌 반응입니다. 벽에 막히게 하거나, 튕겨 내거나, 데미지를 주는 것이 반응에 해당합니다.
모든 물체를 서로 하나하나 비교하면 물체 수가 늘수록 계산량이 급격히 커집니다. 그래서 물리 엔진은 먼저 대략적인 범위로 후보를 추리는 넓은 단계(Broad Phase)를 거친 뒤, 가까운 후보끼리만 정밀하게 검사하는 좁은 단계(Narrow Phase)를 수행합니다.
충돌체 모양과 판정 방식
| 충돌체 | 특징 | 어울리는 대상 |
|---|---|---|
| 구(Sphere)·원 | 계산이 가장 가벼움 | 총알, 아이템 줍기 범위 |
| 박스(AABB·OBB) | 축 정렬 박스는 특히 빠름 | 상자, 벽, 건물 |
| 캡슐 | 위아래가 둥근 기둥, 계단과 경사에 강함 | 캐릭터 |
| 메시 | 모델 모양 그대로, 계산이 무거움 | 복잡한 지형 |
실제 모델이 복잡해도 충돌체는 단순한 모양으로 감싸는 것이 기본입니다. 플레이어가 느끼기에 어색하지 않은 선에서 단순할수록 성능과 안정성이 좋아집니다. 격투·액션 게임에서는 공격 판정 박스(히트박스)와 맞는 판정 박스(허트박스)를 따로 두어 정밀하게 조정합니다.
리지드바디와 물리 시뮬레이션
리지드바디(강체)는 물리 엔진이 움직임을 계산해 주는 물체입니다. 질량, 중력, 마찰, 탄성 같은 값을 넣으면 엔진이 힘과 속도를 계산해 위치를 바꿉니다. 굴러가는 공, 무너지는 상자, 날아가는 수류탄에 씁니다.
- 동적(Dynamic): 물리 엔진이 움직임을 전부 계산
- 키네마틱(Kinematic): 코드나 애니메이션으로 움직이고, 다른 물체를 밀어낼 수 있음
- 정적(Static): 움직이지 않는 벽과 바닥
캐릭터는 리지드바디 대신 캐릭터 컨트롤러를 쓰는 경우가 많습니다. 물리 그대로 움직이면 미끄러지거나 넘어지는 등 조작감이 떨어지기 때문입니다. 게임은 현실 재현보다 손맛이 중요하다는 점을 기억해 두세요.
트리거와 레이어
트리거는 물리적으로 막지는 않고 '들어왔다, 나갔다'만 알려 주는 영역입니다. 함정 발동 구역, 체크포인트, 대화 시작 범위에 씁니다. 반대로 콜리전은 실제로 부딪혀 막습니다.
레이어(충돌 그룹) 설정도 중요합니다. 아군 총알이 아군과 충돌하지 않게 하거나, 아이템끼리는 서로 검사하지 않게 하면 버그와 계산량을 함께 줄일 수 있습니다. 충돌 행렬을 처음부터 정리해 두면 프로젝트가 커져도 관리하기 쉽습니다.
자주 만나는 물리 버그
- 터널링: 빠른 총알이 한 프레임 사이에 벽을 통과함. 연속 충돌 감지나 레이캐스트로 해결
- 떨림: 물체끼리 겹친 상태로 시작하거나 질량 차이가 너무 클 때 발생
- 충돌 이벤트가 안 옴: 양쪽 중 한쪽에 리지드바디가 없거나 레이어 설정이 막혀 있음
- 프레임마다 결과가 다름: 물리 코드를 고정 시간 갱신이 아닌 곳에서 처리함
레이캐스트는 한 점에서 광선을 쏴 무엇에 먼저 닿는지 알아내는 기능입니다. 총 사격 판정, 땅에 닿았는지 확인, 마우스로 물체 고르기 등에 두루 쓰여, 물리 엔진에서 가장 자주 쓰는 기능 중 하나입니다.
연습해 보기
공 굴리기 게임을 만들어 리지드바디와 마찰을 바꿔 보고, 2D 플랫포머에서 캐릭터 컨트롤러와 리지드바디 방식을 비교해 보세요. 빠른 총알을 일부러 만들어 터널링을 재현하고 고쳐 보는 것도 좋은 공부입니다.
SBS아카데미게임학원 게임프로그래밍 과정은 캐릭터 컨트롤, 물리 엔진 적용을 포함한 게임 시스템 구현을 엔진 기반 실습으로 다룹니다.
자주 묻는 질문
물리 엔진을 직접 만들어야 하나요?
대부분의 게임은 엔진에 들어 있는 물리 엔진을 씁니다. 다만 간단한 AABB 충돌 정도는 직접 구현해 보면 원리 이해에 큰 도움이 됩니다.
격투 게임의 히트박스도 물리 엔진으로 처리하나요?
정밀한 판정이 필요해 물리 시뮬레이션 대신 직접 만든 박스 판정을 쓰는 경우가 많습니다. 프레임 단위로 판정 박스를 켜고 끄는 방식이 흔합니다.
