
Godot 4에서 유닛 이동을 처음 구현할 때 타일맵 내장 네비게이션을 썼다. TileMap에 네비게이션 레이어를 추가하고 NavigationAgent2D를 붙이면 되니까 처음엔 간단해 보였다. 그런데 실제로 써보니 문제가 하나씩 나왔다.
타일맵 내장 방식의 문제
타일마다 네비게이션 폴리곤을 직접 설정해야 한다. 타일셋에서 각 타일을 골라서 네비게이션 영역을 그려줘야 하는데, 타일 종류가 많아지면 이게 꽤 번거롭다. 그리고 타일맵을 수정할 때마다 네비게이션이 제대로 반영됐는지 확인해야 했다.
더 큰 문제는 Y-sort와 함께 쓸 때였다. 유닛이 Y축 기준으로 렌더링 순서가 바뀌어야 하는데, 타일맵 내장 네비게이션에서 이 부분이 예상대로 안 됐다. 레이어 구조를 맞추는 게 복잡했다.
NavigationRegion2D로 바꿨다
방법은 생각보다 단순하다. NavigationRegion2D 노드를 씬에 추가하고, NavigationPolygon을 직접 그려주면 된다. 타일맵과 분리된 별도 노드니까 타일맵을 바꿔도 네비게이션은 독립적으로 유지된다.
에디터에서 폴리곤을 직접 그리는 방식이라 “이 지역은 못 지나간다”를 시각적으로 확인하면서 설정할 수 있다. 장애물 영역을 StaticBody2D 대신 NavigationObstacle2D로 추가하는 것도 직관적이었다.
Y-sort 문제 해결
NavigationRegion2D로 바꾸면서 씬 구조도 정리했다. TileMap은 렌더링 전용으로 두고, 네비게이션은 완전히 별도 레이어로 분리했다. 유닛들은 Y-sort가 활성화된 노드 아래에 배치해서 Y축 기준 렌더링 순서가 자동으로 적용되도록 했다.
이렇게 하니까 타일맵 위를 걷는 유닛이 타일 뒤에 가려지거나 앞에 나오는 게 자연스럽게 됐다. 2D 게임에서 2.5D 느낌을 내려면 Y-sort가 핵심인데, 네비게이션을 분리하고 나서야 제대로 동작했다.
정리하자면
타일맵 내장 네비게이션은 작은 맵이나 단순한 구조에서는 괜찮다. 하지만 Y-sort가 필요하거나 맵을 자주 바꿀 계획이라면 NavigationRegion2D로 분리하는 게 낫다. 초반에 구조를 제대로 잡는 게 나중에 고치는 것보다 훨씬 덜 힘들다는 걸 직접 경험했다.