런타임에 그래프를 이동하는 방법

런타임에 그래프를 이동해야 하는 이유는 무엇입니까?

런타임에 그래프를 이동해야 할 여러 가지 이유가 있습니다:

파일에서 그래프를 로드했지만 원하는 위치에 배치되지 않았습니다.

전체 세계를 새로운 위치로 이동하고 싶으며, 그래프도 함께 이동하기를 원합니다.

절차적으로 생성된 레벨을 커버하기 위해 그래프를 이동하고 크기를 조정한 다음, 새로운 위치에서 그래프를 스캔하고 싶습니다.

매우 크거나 무한한 절차적 세계에서 에이전트를 따라다니도록 그래프를 이동하고 싶습니다.

참고: 런타임에 그래프를 처음부터 생성하려면  Creating graphs during runtime 을 참조하세요.

 

런타임에 그래프를 어떻게 이동합니까?

그래프를 이동하는 방법은 그래프 유형에 따라 다르지만, 일반적으로 먼저 그래프에 새로운 설정을 할당한 다음, RelocateNodes 메서드를 사용하여 실제로 노드를 이동시킵니다. 일부 그래프에는 방향 설정을 직접 지정할 수 있는 RelocateNodes 메서드의 오버로드가 있습니다.

RelocateNodes 메서드에는 몇 가지 다른 오버로드가 있지만, 가장 일반적인 사용 예는 아래 코드 스니펫에서 볼 수 있습니다:

 

그리드 그래프/레이어드 그리드 그래프의 경우:

// 그래프를 원점으로 이동, 회전 없음, 노드 크기 1.0
var gg = AstarPath.active.data.gridGraph;
gg.RelocateNodes(center: Vector3.zero, rotation: Quaternion.identity, nodeSize: 1.0f);

 

 

Recast 그래프의 경우:

// 그래프를 (20, 10, 10) 지점으로 이동, X 축을 기준으로 45도 회전
var graph = AstarPath.active.data.recastGraph;
graph.forcedBoundsCenter = new Vector3(20, 10, 10);
graph.rotation = new Vector3(45, 0, 0);
graph.RelocateNodes(graph.CalculateTransform());

 

 

navmesh graph의 겨우:

// 그래프를 (20, 10, 10) 지점으로 이동, X 축을 기준으로 45도 회전
var graph = AstarPath.active.data.navmesh;
graph.offset = new Vector3(20, 10, 10);
graph.rotation = new Vector3(45, 0, 0);
graph.RelocateNodes(graph.CalculateTransform());

 

 

새 위치에서 그래프 스캔하기

그래프를 이동한 후 새 위치에서 스캔하려면 끝에 Scan 호출을 추가할 수 있습니다:

// 그래프를 원점으로 이동, 회전 없음, 노드 크기 1.0
var gg = AstarPath.active.data.gridGraph;
gg.RelocateNodes(center: Vector3.zero, rotation: Quaternion.identity, nodeSize: 1.0f);
// 새 위치에서 그래프 스캔
AstarPath.active.Scan();

 

 

에이전트를 따라 그래프 이동하기

큰 절차적 세계 또는 무한한 절차적 세계가 있는 경우, 그래프가 플레이어를 중심으로 하고 플레이어가 이동할 때 그래프가 따라다니도록 할 수 있습니다. 기술적으로 그래프를 자주 이동하고 스캔하여 수행할 수 있지만, 이는 매우 비효율적입니다. 대신 ProceduralGraphMover 컴포넌트를 사용하여, 실제로 이동에 영향을 받는 노드만 다시 계산함으로써 그리드, 레이어드 그리드 또는 Recast 그래프를 런타임에 훨씬 효율적으로 이동할 수 있습니다.

 

참조
ProceduralGraphMover
Large worlds

'유니티 에셋 > A* Pathfinding project pro' 카테고리의 다른 글

Creating graphs during runtime  (0) 2024.05.28
Off-mesh links  (0) 2024.05.28
Large worlds  (0) 2024.05.27
Accessing graph data  (0) 2024.05.27
Saving and Loading Graphs  (0) 2024.05.27

+ Recent posts