이 페이지는 2D 게임에서 경로 탐색을 작동시키는 방법을 보여줍니다.
Contents
Introduction
이 패키지에는 2D 설정을 보여주는 2개의 예제 장면이 포함되어 있습니다. 그 이름은 Example15_2D와 Example16_RVO 2D입니다.
2D 게임에서 하고자 하는 경로 탐색에는 여러 유형이 있습니다. 주로 두 가지 유형이 있습니다.
- 탑다운 경로 탐색: 위에서 세계를 내려다보는 게임에서 사용됩니다. 위의 이미지가 이 경우에 해당합니다.
- 플랫폼 경로 탐색: 예를 들어, 클래식 슈퍼 마리오와 유사합니다. 이 패키지는 현재 이 유형의 경로 탐색을 지원하지 않습니다. 포인트 그래프와 사용자 정의 연결을 생성하여 많은 것을 할 수 있지만, 기본적으로는 지원하지 않습니다.
이 비디오는 경로 탐색이 있는 간단한 2D 장면을 만드는 방법을 안내합니다.
Graph support
모든 그래프는 XY 평면에서 경로 탐색을 지원하며 2D 물리를 지원합니다.
Grid graphs
그리드 그래프와 계층화된 그리드 그래프는 XY 평면에서 작업하는 것을 잘 지원합니다. 실제로 그리드 그래프는 어느 방향으로든 회전할 수 있으며 여전히 작동합니다. 2D 게임의 경우 그리드 그래프에서 '2D' 토글을 체크하여 그래프가 XY 평면에 맞도록 회전시키는 것이 좋습니다. 2D 콜라이더를 사용하는 경우 'Use 2D Physics' 체크박스를 활성화하는 것도 필요합니다.
Point graphs
포인트 그래프는 XY 평면에서 경로 탐색을 지원합니다. 그리드 그래프와 마찬가지로 'Raycast' 설정이 활성화되어 있고 2D 콜라이더를 사용하는 경우 'Use 2D Physics' 체크박스를 활성화하는 것이 좋습니다.
Recast graphs
리캐스트 그래프는 XY 평면(및 다른 모든 방향)에서 작동하도록 회전할 수 있습니다. 2D 콜라이더를 사용하려면 dimensions 필드를 2D로 변경할 수 있습니다.
리캐스트 그래프는 일반 3D 메쉬, 3D 콜라이더 및 2D 콜라이더를 래스터화하는 것을 지원합니다. 현재 스프라이트를 메쉬로 래스터화하는 것은 지원하지 않습니다.
Navmesh graphs
네비메쉬 그래프도 마찬가지로 어느 방향으로든 회전하여 작동할 수 있습니다. 그러나 그래프의 'up' 방향이 원하는 'up' 방향에 해당하도록 주의해야 합니다. 예를 들어, XY 평면에서 네비메쉬 그래프를 사용하려면 회전 필드를 (-90,0,0)으로 설정해야 하며, Maya 또는 Blender에서 메쉬를 단순히 회전시킬 수는 없습니다.
Tilemaps
그리드 그래프와 리캐스트 그래프 모두 타일맵을 지원합니다. Pathfinding on tilemaps을 사용하는 방법을 알아보려면 타일맵에서의 경로 탐색을 참조하세요.
Graph updates
그래프 업데이트는 기본적으로 2D 게임과 3D 게임에서 동일하게 작동하지만, 몇 가지 유의해야 할 점이 있습니다.
Navmesh Cutting
리캐스트 및 네비메쉬 그래프를 업데이트하는 데 사용할 수 있는 네비메쉬 컷팅은 2D 및 다른 모든 방향에서 작동합니다.
참고 레거시 네비메쉬 컷 모드(사각형/원)를 사용하거나 사용자 정의 메쉬를 사용하는 경우, 네비메쉬 컷이 올바르게 회전되었는지 확인해야 합니다. 레거시 네비메쉬 컷은 그래프 표면에 투영되는 2D 윤곽으로 나타납니다. 레거시 네비메쉬 컷이 잘못 회전된 경우, 2D 윤곽이 단순히 단일 선으로 투영되어 그래프를 원하는 방식으로 컷팅하지 못할 수 있습니다(아래 이미지를 참조하십시오). 수평이 아닌 그래프에서 네비메쉬 컷팅을 사용할 때는 항상 useRotationAndScale 체크박스를 활성화해야 합니다. ![]() |
Graph updates and 2D Colliders
3D 게임에서 그래프 업데이트를 수행하는 일반적인 방법은 다음과 같습니다:
var guo = new GraphUpdateObject(GetComponent<Collider>().bounds);
guo.updatePhysics = false;
guo.modifyWalkability = true;
guo.setWalkability = false;
AstarPath.active.UpdateGraphs(guo);
2D 게임의 경우, 코드를 작동시키기 위해 약간의 조정이 필요합니다. 그 이유는 2D 콜라이더가 무한히 얇아서 경계가 0 부피를 갖기 때문입니다. 그래프는 노드의 위치가 경계 안에 있는지를 확인하기 때문에, 무한히 얇은 경계 안에 어떤 노드도 들어갈 수 없어서 단일 노드도 업데이트되지 않습니다. 이를 해결하기 위해 Z 축을 따라 경계를 확장하여 모든 노드를 포함하도록 할 수 있습니다.
var bounds = GetComponent<Collider2D>().bounds;
// Z 축을 따라 경계를 확장하십시오.
bounds.Expand(Vector3.forward*1000);
var guo = new GraphUpdateObject(bounds);
// 객체의 일부 설정을 변경하십시오.
AstarPath.active.UpdateGraphs(guo);
Movement scripts
포함된 이동 스크립트는 다양한 그래프 방향을 지원합니다.
- AIPath 이동 스크립트는 그리드 그래프, 네비메쉬 그래프 및 리캐스트 그래프에 대해 어떤 그래프 방향에서도 이동을 지원하며, 자동으로 방향을 맞춥니다. 에이전트가 맵에서 떨어지지 않도록 '중력(gravity)' 설정을 비활성화하는 것이 좋습니다.
- AILerp 이동 스크립트는 어떤 그래프 방향에서도 이동을 지원합니다. 많은 2D 게임에서는 +Z 축이 아닌 +Y 축을 에이전트의 전방 방향으로 설정하고 싶을 수 있습니다. 이 경우 AILerp.orientation 체크박스를 활성화할 수 있습니다.
- FollowerEntity 이동 스크립트는 어떤 그래프 방향에서도 이동을 지원하며, 그래프에 자동으로 방향을 맞춥니다. 에이전트가 맵에서 떨어지지 않도록 '중력(gravity)' 설정을 비활성화하는 것이 좋습니다.
- RichAI 이동 스크립트는 현재 XZ 평면 이외의 다른 방향을 지원하지 않습니다. 그러나 이를 지원하기 위한 작업의 대부분이 이미 완료되었으며, 향후 업데이트에서 포함될 것으로 예상됩니다.
2D Movement on Point Graphs
포인트 그래프는 명확하게 정의된 상방향이 없기 때문에 AIPath 스크립트는 방향을 어떻게 맞춰야 하는지 알 수 없습니다. 사용하려는 방향을 알고 있는 경우, AIPath 컴포넌트를 서브클래싱하고 UpdateMovementPlane 메서드를 재정의하여 특정 방향을 사용하도록 강제할 수 있습니다.
class AIPathSub : AIPath {
protected override void UpdateMovementPlane () {
var graphRotation = new Vector3(-90, 0, 0);
movementPlane = new SimpleMovementPlane(Quaternion.Euler(graphRotation));
}
}
graphRotation 변수를 원하는 회전으로 변경할 수 있습니다.
Local avoidance
로컬 회피는 XY 평면에서 작동합니다. 해야 할 유일한 것은 RVOSimulator 컴포넌트의 movementPlane 설정을 XY로 변경하는 것입니다. "RVO 2D"라는 예제 장면을 살펴보면 설정 방법에 대한 예제를 볼 수 있습니다.
'유니티 에셋 > A* Pathfinding project pro' 카테고리의 다른 글
Utilities for turn-based games (0) | 2024.05.25 |
---|---|
Pathfinding in 2D > Pathfinding on tilemaps (0) | 2024.05.25 |
Agent-Specific Pathfinding (0) | 2024.05.25 |
Multiple agent types (0) | 2024.05.25 |
Wandering AI Tutorial (0) | 2024.05.25 |