유니티 에셋/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 참조 |