유니티 에셋/A* Pathfinding project pro

Creating graphs during runtime

스크립팅하는애님 2024. 5. 28. 01:19

스크립트에서 런타임 중 그래프를 생성하는 방법

어떤 이유로 유니티 에디터에서 디자인 시간에 그래프를 생성하고 설정할 수 없는 경우, 스크립팅을 통해 직접 그래프를 생성할 수 있습니다.

참고 그래프 설정 및 완전히 스캔된 그래프를 파일에서 저장하고 로드할 수 있습니다. 자세한 내용은  Saving and Loading Graphs 를 참조하십시오. 일반적으로 유니티 에디터에서 대부분의 설정을 정의한 다음, 게임 시작 시 스크립트를 사용하여 몇 가지 값만 조정하고 그래프를 다시 스캔할 수 있습니다.

 

다음과 같이 그래프를 생성할 수 있습니다:

// 모든 그래프 데이터를 보관합니다.
AstarData data = AstarPath.active.data;

// 그리드 그래프를 생성합니다.
GridGraph gg = data.AddGraph(typeof(GridGraph)) as GridGraph;

그래프 객체는 그래프 에디터에서 노출된 모든 설정을 가지고 있으므로 원하는 값으로 설정한 후 그래프를 스캔할 수 있습니다.

// 모든 그래프 데이터를 보관합니다.
AstarData data = AstarPath.active.data;

// 그리드 그래프를 생성합니다.
GridGraph gg = data.AddGraph(typeof(GridGraph)) as GridGraph;

// 몇 가지 값으로 그리드 그래프 설정
int width = 50;
int depth = 50;
float nodeSize = 1;

gg.center = new Vector3(10, 0, 0);

// 위 값으로 내부 크기 업데이트
gg.SetDimensions(width, depth, nodeSize);

// 모든 그래프 스캔
AstarPath.active.Scan();

완전히 사용자 정의된 그래프를 사용자 노드와 연결로 생성하려면 다음과 같이 포인트 그래프를 사용할 수 있습니다.

// 모든 그래프 데이터를 보관합니다.
AstarData data = AstarPath.active.data;

// 포인트 그래프를 생성합니다.
PointGraph graph = data.AddGraph(typeof(PointGraph)) as PointGraph;

AstarPath.active.Scan(graph);

// 모든 경로 찾기 스레드가 일시 중지된 상태에서만 그래프를 수정해야 합니다.
AstarPath.active.AddWorkItem(new AstarWorkItem(ctx => {
    // 노드 2개를 추가하고 연결
    var node1 = graph.AddNode((Int3) new Vector3(1, 2, 3));
    var node2 = graph.AddNode((Int3) new Vector3(4, 5, 6));
    var cost = (uint)(node2.position - node1.position).costMagnitude;
    GraphNode.Connect(node1, node2, cost);
}));

// 위의 작업 항목을 즉시 실행
AstarPath.active.FlushWorkItems();

또는 사용자 정의 그래프 유형을 생성할 수 있으며, 이에 대한 자세한 내용은 그래프 생성기 작성(Writing Graph Generators)을 참조하십시오.

Graph Types   참조