다양한 경로 유형을 보여주는 예시 장면
Contents
Overview
이 장면은 화면 왼쪽에 GUI 인터페이스를 제공하여 다양한 경로 유형을 선택하고 그 동작을 확인할 수 있도록 합니다.
게임 뷰에서 기즈모(Gizmos)를 활성화하면 그래프와 계산 중인 경로를 볼 수 있습니다.
AstarPath 컴포넌트는 경로 검색을 시각화하도록 설정되어 있습니다. 경로가 계산된 후, 모든 검색된 노드는 파란색으로 강조 표시됩니다. 경로 자체는 주황색으로 그려집니다. 얇은 파란색 선으로 검색 트리를 볼 수도 있습니다. 이 모든 선은 시작 노드에서 수렴하며, 이는 시작 노드에서 검색된 모든 다른 노드로의 최단 경로를 보여줍니다. 이는 A* Inspector -> Settings -> Debug -> Show Search Tree 를 true로 설정하고, 그리드 그래프의 "Show Connections" 옵션을 활성화하여 수행됩니다.
참조: 다양한 경로 유형을 계산하는 방법에 대한 자세한 내용은 " Path Types 에서 Searching for paths " 튜토리얼을 참조하세요. |
Graph setup
이 예시 장면에서는 설명을 위해 그리드 그래프를 사용합니다. 다른 그래프 유형도 사용할 수 있지만, 경로 시각화 측면에서 그리드 그래프가 이해하기 쉽고 설명하기 좋습니다.
여기서 보여지는 모든 경로 유형은 모든 그래프 유형에서 지원되지만, RandomPath와 FleePath 경로 유형은 navmesh/recast 그래프보다 더 높은 세분성을 제공하는 그리드 그래프에서 더 잘 작동합니다.
Path types
이 장면에서는 다음과 같은 경로 유형을 보여줍니다.
ABPath
가장 일반적인 경로 유형으로, 지점 간 이동에 사용됩니다. 모든 이동 스크립트에서 기본적으로 사용됩니다.
게임에서 왼쪽 마우스 버튼을 누르고 있으면, 마우스를 움직일 때 경로가 어떻게 다시 계산되는지 볼 수 있습니다.
참조: 다양한 경로 유형을 계산하는 방법에 대한 자세한 내용은 "경로 검색에서 경로 계산하기" 튜토리얼을 참조하세요. |
// 자동 경로 재계산을 비활성화하세요. ai.canSearch = false; // 참고: 특정 지점으로의 경로만 계산하려면, // `ai.destination`을 사용하는 것이 일반적으로 더 좋은 선택입니다. var path = ABPath.Construct(ai.position, ai.position + Vector3.forward * 10); ai.SetPath(path); |
ABPath 참조 |
MultiTargetPath
MultiTargetPath는 두 가지 시나리오에서 사용할 수 있습니다:
- 하나의 지점에서 여러 다른 지점으로, 또는 여러 지점에서 하나의 목표 지점으로 가는 가장 짧은 경로를 찾고자 할 때.
- 여러 목표 중 가장 가까운 목표로 가는 경로를 찾고자 할 때.
게임 내 GUI에서 "Only Shortest Path" 토글을 통해 이 두 모드 사이를 전환할 수 있습니다.
위 이미지에서는 중심에서 4개의 다른 목표로 가는 단일 MultiTargetPath 가 계산되었습니다. 모든 경로를 동시에 계산하는 것은 하나씩 계산하는 것보다 빠릅니다. 특히 목표가 많거나 목표가 서로 가까운 경우, 경로가 검색된 노드의 많은 부분을 공유하기 때문에 더욱 그렇습니다.
예시 장면에서 이를 테스트하려면, shift+클릭으로 경로에 목표를 추가하고, 그런 다음 좌클릭으로 경로를 계산하세요.
var targets = new Vector3[] { ai.position + Vector3.forward * 5, ai.position + Vector3.right * 10, ai.position + Vector3.back * 15 }; // 자동 경로 재계산을 비활성화하세요. ai.canSearch = false; var path = MultiTargetPath.Construct(ai.position, targets, null, null); // 가장 가까운 목표로 가는 경로만 계산하세요. path.pathsForAll = false; ai.SetPath(path); |
MultiTargetPath 참조 |
RandomPath
RandomPath는 방황하는 에이전트와 절차적으로 세계 특징을 생성하는 데 유용합니다.
RandomPath는 시작 지점에서 외부로 검색을 시작하여 [검색 거리]와 [검색 거리] + [분산] 사이의 경로 비용을 가진 목표 노드를 선택합니다. 이 값들은 GUI에서 설정할 수 있습니다. 또한, 목표 지점(커서로 지정)에 더 가까이 이동할 가능성을 높이는 목표 강도(aim strength)도 지정할 수 있습니다.
// 자동 경로 재계산을 비활성화하세요. ai.canSearch = false; // AI가 무작위 방향으로 이동하도록 설정하세요. // 경로는 약 20 월드 유닛 길이로 설정됩니다 (기본적으로 1 월드 유닛 이동 비용은 1000입니다). var path = FleePath.Construct(ai.position, 1000 * 20); path.spread = 5000; ai.SetPath(path); |
RandomPath wander 참조 |
FleePath
FleePath는 본질적으로 RandomPath 와 동일하지만, 경로가 끝 지점에서 멀어지도록 시도합니다.
커서에서 멀어지도록 경로를 설정하려면 피하는 힘(flee strength)을 0보다 크게 설정하세요.
// 자동 경로 재계산을 비활성화하세요. ai.canSearch = false; var pointToAvoid = enemy.position; // AI가 적으로부터 도망가도록 설정하세요. // 경로는 약 20 월드 유닛 길이로 설정됩니다 (기본적으로 1 월드 유닛 이동 비용은 1000입니다). var path = FleePath.Construct(ai.position, pointToAvoid, 1000 * 20); ai.SetPath(path); |
FleePath 참조 |
ConstantPath
ConstantPath는 경로를 계산하지 않고, 대신 주어진 최대 경로 비용으로 에이전트가 도달할 수 있는 모든 노드를 찾습니다.
이 경로 유형은 턴제 게임에서 에이전트가 자신의 턴에 도달할 수 있는 모든 노드를 시각화하려는 경우에 유용합니다.
ConstantPath.allNodes 필드에서 출력 노드를 가져올 수 있습니다. 이 노드는 시작 노드에서의 비용에 따라 정렬되어 있습니다. 그러나 이 경로 유형에서는 비용이 저장되지 않기 때문에 직접 비용을 접근할 수는 없습니다.
이 설정을 통해 에이전트가 도달할 수 있는 모든 노드를 시각화할 수 있습니다.
// 여기서 새로운 경로를 생성하고 검색할 최대 거리를 설정합니다. ConstantPath cpath = ConstantPath.Construct(transform.position, 20000, null); AstarPath.StartPath(cpath); // 경로가 계산될 때까지 대기합니다. // 위의 생성자에서 콜백을 제공하여 비동기적으로 계산할 수도 있습니다. cpath.BlockUntilCalculated(); // 범위 내의 모든 노드에서 위쪽으로 선을 그립니다. for (int i = 0; i < cpath.allNodes.Count; i++) { Debug.DrawRay((Vector3)cpath.allNodes[i].position, Vector3.up, Color.red, 2f); } |
참조: ConstantPath , PathUtilities.BFS 는 유사한 방식으로 작동하지만 경로 비용을 사용하지 않고, 노드에 도달하는 데 필요한 단계 수만 사용합니다. |
FloodPath and FloodPathTracer
FloodPath 는 자체적으로는 특별히 유용하지 않지만, 모든 노드로의 경로를 계산하여 그래프를 "홍수"처럼 덮습니다. 이 데이터는 경로에 저장되며, 이후 FloodPathTracer 경로를 계산할 수 있습니다. FloodPathTracer 경로는 시작 지점에서 원래 FloodPath가 시작된 지점까지의 경로를 추적합니다. FloodPathTracer 검색은 일반 경로 요청에 비해 매우 빠릅니다.
예시 장면에서 테스트하는 방법:
- FloodPath 모드를 선택합니다.
- FloodPath가 시작될 지점을 클릭합니다.
- FloodPathTracer 모드를 선택합니다.
- 클릭하고 홀드하여 커서에서 FloodPath의 시작 지점까지 경로를 계산합니다.
콘솔에서 FloodPathTracer의 계산 시간을 확인할 수 있습니다. ABPath에 비해 매우 빠르게 계산되는 것을 확인할 수 있습니다.
이 경로 유형은 많은 에이전트를 생성하고 모두 동일한 목표로 이동해야 하는 게임 (예: 타워 디펜스 게임)에서 유용할 수 있습니다.
FloodPath FloodPathTracer 참조 |
'유니티 에셋 > A* Pathfinding project pro' 카테고리의 다른 글
Spherical world (0) | 2024.05.23 |
---|---|
Hexagonal Turn Based (0) | 2024.05.23 |
Lightweight Local Avoidance Simulation (0) | 2024.05.23 |
Infinite procedurally generated world (0) | 2024.05.23 |
Recast graph with off-mesh links (0) | 2024.05.23 |