rectangular-tilemap-pathfinder는 유니티에서 사용하는 정적인 직사각형 타일맵의 최단경로 찾기 시스템입니다.
A* 알고리즘을 사용하였으며 상하좌우 및 대각선 탐색을 통해서 시작점부터 끝점까지의 최단경로를 계산합니다.
Unity 2021.3.5f1
Assets > Import Package > Custom Package... > Open rectangular-tilemap-pathfinder.unitypackage
-
Rectangular Tilemap
을 만들고Grid
에AStarGrid.cs
를 추가합니다.
(예제TestScene
를 참고해주세요. 플레이 모드에서 Left Mouse Button으로 시작점, Right Mouse Button으로 끝점을 설정하고 Space Bar로 최단 경로를 볼 수 있습니다.) -
Grid
하위 타일맵에 이동 가능한 타일을 타일 팔레트를 이용해 배치합니다.
(예제의Walkable
이 그러한 타일맵입니다.) -
인스펙터에서
AStarGrid
의Walkable Map
변수에 2번에서 사용한 타일맵을 할당합니다.
-
월드 좌표 또는 좌표를 통해 최단 경로를 찾을 시작점과 끝점의
AStarNode
를 얻습니다. 이미 두AStarNode
가 있으면 다음 단계를 진행합니다. -
AStarGrid
인스턴스에서pathfinder.CreatePath
함수를 호출합니다.
(이때diagonal
매개변수를true
로 하면 상하좌우에 더해 대각선도 탐색합니다.) -
탐색이 성공하면 최단 경로인
List<AStarNode>
가 반환됩니다. 실패하면null
이 반환됩니다.
실제 사용 시 예제의 Grid (Example)
처럼 게임의 배경으로 쓸 타일맵(World Map
)을 배치하고 이에 맞게 Walkable
에 타일을 배치하면 됩니다.
-
AStarNode.cs
탐색에 사용되는 노드 클래스. 노드와 타일맵의 타일은 1:1로 매치됩니다.
노드의xPos
와yPos
에는 타일 왼쪽 아래의 월드 좌표가 저장됩니다. -
AStarGrid.cs
노드의 그리드를 관리하는 클래스.
멤버 변수인walkableMap
에 할당된 타일맵에 대해서 그리드를 생성하고, 특정 노드의 이웃 노드를 계산하는 등의 기능을 합니다. -
AStarPathfind.cs
A* 알고리즘을 이용해 최단 경로를 계산하는 클래스.
맨해튼 거리와 체비쇼프 거리로 휴리스틱값을 계산합니다.
-
Grid (Standard size)
셀 크기가 (1, 1, 0)이고 셀 간격이 (0, 0, 0)인 기본 타일맵에 대한 예제. -
Grid (Custom size)
셀 크기가 (0.5, 0.5, 0)이고 셀 간격이 (0.5, 0.5, 0)인 크기가 다른 타일맵에 대한 예제. -
Grid (Many tiles)
기본 타일맵이지만 타일이 번잡하게 배치되어있는 케이스의 예제. -
Grid (Example)
실제 게임에 사용 시 참고할 예제. 게임의 배경으로 쓸 타일맵인World Map
과 이동 가능한 타일맵인Walkable
가 있습니다.