격자 맵에서 목적지 칸은 비어 있지만 양옆에 벽이 있습니다. 캐릭터가 대각선으로 그 모서리를 지나가도 되나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
목적지 셀이 비어 있다는 사실만으로 대각 이동을 허용하면 안 됩니다. 출발 셀과 목적 셀 사이의 두 직교 셀이 벽인 경우, 중심점만 이동하는 격자 경로는 통과해 보이지만 크기가 있는 캐릭터의 몸체가 두 벽이 만나는 모서리를 관통할 수 있습니다. 이것은 경로 탐색 알고리즘의 문제가 먼저가 아니라, 대각 이동이 어떤 공간을 통과할 수 있는지에 대한 모서리 통과 규칙(corner-cutting rule)의 문제입니다.
이동 규칙을 명시하기
다음과 같은 맵을 생각할 수 있습니다.
S #
# G
S와 G는 비어 있지만 두 벽이 모서리에서 맞닿아 있습니다. 서버가 대각 이동을 허용하려면 양옆의 직교 셀을 모두 비워야 하는지, 하나만 비어도 되는지, 대각 이동을 전부 금지할지를 정해야 합니다. 실제 캐릭터 반경이 셀 크기보다 작아도 벽의 모서리와 충분한 간격이 있는지 확인해야 하므로 “양옆 셀 중 하나가 비면 된다”는 규칙을 모든 크기에 재사용할 수는 없습니다. 캐릭터 중심의 이동 경로를 찾기 전에 장애물을 반경만큼 팽창시키는 구성 공간의 장애물 팽창(configuration-space obstacle inflation)을 적용하면, 크기 있는 물체를 점의 경로 문제로 바꿀 수 있습니다. 대각선 비용을 직교 비용과 다르게 두었다면 휴리스틱과 경로 가지치기도 그 규칙을 반영해야 합니다. 한쪽에서는 모서리 통과를 막고 다른 쪽에서는 허용하면 A*·JPS가 계산한 경로와 실제 충돌 검사가 달라집니다. 캐릭터마다 반경·높이·경사 이동 능력이 다르면 동일한 walkable 비트맵 대신 에이전트 유형별 팽창 결과나 clearance를 사용하겠습니다.
경계와 검증
부동소수점 위치를 셀로 변환할 때 경계에 정확히 걸린 점을 어느 셀로 넣는지, 음수 좌표의 반올림을 어떻게 하는지 고정해야 합니다. 대각 이동 후보를 만들 때는 두 직교 셀의 물리적 점유와 동적 점유를 함께 보고, 최종 이동 직전에는 중심선뿐 아니라 캐릭터 footprint가 벽과 겹치지 않는지 검사합니다. 화면이 지나갈 수 있게 그려졌더라도 서버가 거절할 수 있으므로 클라이언트와 서버의 예측 규칙·팽창 반경·지형 버전을 맞추거나 서버 결과에 따라 보정합니다. 테스트는 두 벽의 모서리, 한 칸 통로, 서로 다른 캐릭터 반경, 대각선 경계 출발, 동적 문, 음수 좌표를 포함합니다. 기대 결과는 단지 목적지에 도착하는 것이 아니라, 이동 중 어느 순간에도 footprint가 벽과 겹치지 않고 A*·JPS의 최적성 전제가 같은 규칙을 사용하는 것입니다. 빈 목적지와 실제 통과 가능 공간(traversable space)을 구분해야 합니다.
대각 이동 검사는 중심이 셀 중앙에서 중앙으로 간다는 모델을 벗어나면 더 명확해집니다. 캐릭터 footprint를 이동 방향으로 쓸어 양옆 벽의 팽창 영역과 겹치는지 검사하고, 셀보다 작은 반경이라도 모서리에서 두 팽창 영역이 만나는 경우를 차단합니다. 큰 캐릭터가 여러 셀을 차지하면 목적지 하나가 아니라 전체 점유 집합과 중간 경로를 확인해야 합니다. 모서리 접촉을 허용할지 금지할지는 충돌 엔진의 등호 처리와 맞아야 합니다. 한 시스템은 경계 접촉을 충돌로 보고 다른 시스템은 통과로 보면 반복 이동 때 결과가 달라집니다. 셀 좌표와 월드 좌표 변환, 동적 점유 스냅샷, 클라이언트 예측을 같은 테스트 벡터로 검증하겠습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 빈 목적지와 크기 있는 캐릭터의 실제 통과 가능성을 구분한다.
- 양옆 셀 규칙·장애물 팽창·에이전트 반경을 명시한다.
- 휴리스틱·JPS·클라이언트 표시가 같은 이동 규칙을 전제하도록 한다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 목적지 셀이 비면 대각 이동은 항상 가능하다고 말한다.
- 캐릭터 크기와 모서리 충돌을 중심점 경로로 대체한다.
- 이동 규칙을 바꾸고도 탐색 최적화의 전제를 재검증하지 않는다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 장애물을 캐릭터 반경만큼 팽창시키면 좁은 통로가 사라집니다. 여러 크기의 경로 데이터를 어떻게 저장하나요?
- 서로 다른 반경의 캐릭터가 같은 clearance map을 사용합니다. 어떤 기하·해상도 조건을 확인해야 하나요?
- 셀 경계의 부동소수점 오차로 서버와 클라이언트의 대각 판정이 달라지면 어떻게 수렴시키나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.