다양한 그래프 유형의 간단한 개요
이 프로젝트에는 여러 가지 그래프 유형이 포함되어 있으며, 직접 작성할 수도 있습니다.
이 문서에서는 다양한 그래프 유형과 그 설정에 대해 간략히 설명합니다.
그래프는 세계의 이동 가능한 영역을 나타냅니다. 이는 노드와 그들 간의 연결로 이루어져 있습니다. 그래프마다 세계를 표현하는 방식이 다르며, 점, 그리드 타일, 삼각형 메쉬 등 다양한 형태가 있습니다. 따라서 각기 다른 그래프는 서로 다른 유형의 게임에 더 적합합니다.
간단히 말해, 어떤 그래프를 사용해야 할까요?
게임에 가장 적합한 그래프 유형을 처음 평가하려면, 이 플로우차트를 사용하세요:
- ¹ 큰 세계란 무엇인가요? 상황에 따라 다르지만, 그리드 그래프가 400x400 노드보다 커야 한다면 리캐스트 그래프가 더 나은 선택입니다.
- ² 구형 세계나 다른 특이한 세계 형태의 경우, 구형 세계를 참고하세요.
- ³ 이 패키지는 안타깝게도 사이드 스크롤링 게임에 대한 지원이 적습니다. 그러나 포인트 그래프는 일부 게임에서 잘 작동할 수 있습니다.
- ⁴ 무한한 세계의 경우, 작은 이동 그래프를 참고하세요.
이 가이드는 대략적인 안내일 뿐이며, 각 그래프의 장단점에 대한 자세한 정보는 페이지의 나머지 부분을 참고해야 합니다.
Grid Graph
그리드 그래프는 가장 간단한 그래프입니다. 이름에서 알 수 있듯이, 그리드 패턴으로 노드를 생성합니다. 대부분의 장면에서 잘 작동하며, 런타임 중에 그래프를 업데이트해야 하는 경우에 특히 유용합니다(RTS나 타워 디펜스 게임 등). 하지만 성능 및 메모리 측면에서 큰 세계와 큰 개방 공간을 처리하는 데는 그다지 좋지 않습니다. 모든 영역을 동일한 노드 밀도로 나타내기 때문입니다.
장점:
- 그리드 그래프는 패널티와 태그와 잘 작동합니다.
- 그래프 업데이트가 빠릅니다.
- 그래프 스캔이 비교적 빠릅니다.
단점:
- 메모리 사용량이 리캐스트 그래프보다 많습니다.
- 장거리 경로 탐색이 리캐스트 그래프보다 느릴 수 있습니다.
- 매우 큰 세계에서는 확장되지 않습니다.
Pathfinding.GridGraph를 참조 |
Hexagonal Grid Graph
그리드 그래프를 생성하고 그리드 그래프 인스펙터의 Shape 옵션을 Hexagonal로 변경하여 육각형 그래프를 만들 수 있습니다. 일반 그리드 그래프와 동일한 장단점이 적용됩니다.
예제를 보려면 'Example14_TurnBased_Hexagon'이라는 예제 장면을 참조하세요.
Layered Grid Graph - A* Pro Only
GridGraph는 훌륭하지만, 여러 층이 있는 집과 같은 중첩된 영역을 잘 처리하지 못합니다. 그래서 중첩된 영역을 지원하는 그리드 그래프가 있습니다. 이 그래프는 일반 그리드 그래프에 비해 약간 더 많은 메모리를 사용하지만, 그 외에는 동일하게 작동합니다.
Pathfinding.GridGraph를 참조 |
Recast Graph - A* Pro 전용
리캐스트 그래프는 그리드 대신 삼각형 네비게이션 메쉬를 생성합니다. 이는 Recast라는 오픈 소스 네비게이션 시스템을 기반으로 하며, Unity에서 네이티브로 실행됩니다.
리캐스트 그래프 생성기는 세계를 복셀화(고해상도 Minecraft 세계처럼 많은 큐브로 변환)하고 네비게이션 메쉬를 생성하여 Navmesh Graph와 유사하게 사용할 수 있습니다. 몇 초 만에 강력한 메쉬를 생성할 수 있으며, 수동 메쉬 빌딩에 몇 시간이 걸릴 수 있습니다.
Unity의 네비게이션 시스템을 사용한 적이 있다면 이 그래프가 익숙할 것입니다. Unity의 시스템도 Recast를 기반으로 하기 때문입니다.
3D 모델링 프로그램에서 수동으로 네비게이션 메쉬를 생성하고자 한다면 Navmesh Graph를 사용할 수 있습니다.
장점:
- 작은 디테일과 큰 영역을 동시에 표현할 수 있습니다.
- 노드 수가 적어 경로 탐색이 빠릅니다.
- 대규모 세계를 지원합니다.
- Navmesh Cutting을 사용한 빠른 업데이트(주로 네비게이션 메쉬에 구멍을 뚫는 데 사용).
- 전체 리캐스트 그래프 타일을 재계산하는 빠른 그래프 업데이트.
- 상대적으로 낮은 메모리 사용량.
단점:
- 매우 높은 디테일이나 매우 큰 세계가 필요한 경우 스캔이 느릴 수 있습니다.
- 그리드 그래프보다 업데이트가 느림(하지만 Navmesh Cutting을 사용할 수 있다면 빠름).
- 나무나 장애물이 없는 언덕과 같은 큰 굴곡이 있는 빈 지역은 리캐스트 그래프가 잘 표현하지 못할 수 있습니다. 타일링을 활성화하면 큰 노드를 나누는 데 도움이 될 수 있습니다.
- 태그와 패널티를 표현하는 데 좋지 않음.
RecastGraph와 Using navmeshes 참조 |
Navmesh Graph
네비메시 그래프는 경로 탐색 데이터를 사각형(그리드 그래프)이나 점(포인트 그래프) 대신 삼각형 메쉬로 나타냅니다. 이는 런타임 중 많은 변경이 필요하지 않은 매끄럽고 빠른 경로 탐색에 적합합니다. 노드 수가 적기 때문에 그리드 그래프보다 빠르며, 반환된 경로는 직접 사용할 수 있지만 퍼널 수정자를 강력히 권장합니다.
이 시스템은 네비메시를 자동으로 생성할 수 있지만(리캐스트 그래프 - A* Pro 전용 참고), 이 그래프를 사용하려면 선호하는 3D 모델링 애플리케이션에서 직접 생성해야 합니다. 네비메시는 다각형이 이동 가능한 영역을 설명하는 메쉬입니다. 정점은 항상 메쉬의 가장자리에 있어야 하며(특정한 경우 제외), 매우 긴 가장자리를 나누는 것도 좋은 방법입니다.
장점:
- 작은 디테일과 큰 영역을 동시에 표현 가능
- 노드 수가 적어 경로 탐색이 빠름
- 대규모 세계 지원
- Navmesh Cutting을 사용한 빠른 업데이트(주로 네비메시에 구멍을 뚫는 데 제한됨)
- 상대적으로 낮은 메모리 사용량
- 스캔 속도가 빠름
단점:
- 네비메시 생성에 많은 수작업 필요
- 태그와 패널티를 표현하는 데 좋지 않음
Pathfinding.NavMeshGraph, Creating a navmesh manually, Using navmeshes 참조 |
Point Graph
포인트 그래프는 모든 그래프 유형 중 가장 단순하지만 많은 사용자 정의를 허용합니다. 이는 연결된 사용자 배치 점들로 구성됩니다.
포인트 그래프는 루트 변환을 기준으로 스캔되며, 모든 자식을 노드로 취급합니다. 그런 다음 레이캐스트를 사용하여 노드 간의 연결 가능성을 확인하여 링크 여부를 결정합니다. 포인트 그래프에서 좋은 경로를 얻는 것은 어려울 수 있으며, 레이캐스트 수정자가 괜찮은 결과를 제공합니다.
포인트 그래프의 일반적인 문제는 많은 노드를 추가하지 않으면 "올바른" 가장 가까운 노드를 얻기 어렵다는 것입니다. 예를 들어, 에이전트가 벽에 가까이 이동하면 가장 가까운 노드는 벽의 반대편에 있을 수 있습니다. 노드를 너무 드물게 배치하지 않도록 하여 이를 완화할 수 있습니다.
다른 그래프 유형이 게임에 적합하지 않은 경우를 제외하고 이 그래프 유형의 사용은 권장되지 않습니다.
장점:
- 노드 배치에 대한 완전한 제어 가능. 이를 통해 3D 경로 탐색도 가능.
- 간단한 경우에는 스캔이 빠름.
단점:
- 모든 노드를 배치하는 데 많은 수작업 필요(또는 자동으로 스크립트를 작성해야 함).
- 많은 노드가 없으면 좋은 품질의 경로를 얻기 어려움.
- 경로 탐색이 종종 느림.
- 그래프 업데이트가 느림.
Pathfinding.PointGraph 참조 |
'유니티 에셋 > A* Pathfinding project pro' 카테고리의 다른 글
Migrating from Unity Navigation (0) | 2024.05.22 |
---|---|
Architecture overview (0) | 2024.05.21 |
The A* Inspector (0) | 2024.05.20 |
Using navmeshes > Automatically generating a navmesh (0) | 2024.05.20 |
Using navmeshes > Creating a navmesh manually (0) | 2024.05.20 |