This document is about: QUANTUM 2
SWITCH TO

Importing A Unity Navmesh

퀀텀에 navmesh를 가져오는 가장 일반적인 방법은 Quantum binary navmesh를 가져와 Quantum binary navmesh로 베이킹하는 것입니다.

  • 유니티 씬을 글로벌 Navmesh Baker 또는 Navmesh Building Components (Navmesh Surfaces)중 하나를 사용하여 생성합니다.
  • 맵(Quantum MapData 스크립트) 아래 새로운 GameObject를 생성하고 MapNavMeshUnity 스크립트를 추가합니다. GameObject의 이름은 나중에 Quantum navmesh의 이름이 될 것입니다.
    create navmesh script
    Adding the MapNavMeshUnity script to import a Unity navmesh
  • 맵을 선택하고 Bake All ModeEverything으로 전환한 후 Bake All을 누르고 로그에서 오류를 확인합니다. 다음과 유사한 로그 메시지가 예상됩니다:

    Unknown

    Imported Unity NavMesh 'Navmesh', cleaned up 1211 vertices, found 7 region(s), found 4 link(s)
    
    map baking
    Baking the map will import and bake the navmeshes
  • Quantum navmesh 가 나타나게 됩니다..
    • ..Quantum 맵 에셋 NavMeshLinks 아래
    • ..맵 에셋 파일 옆의 프로젝트 뷰 내부 (하나의 Quantum 에셋 파일과 하나의 바이너리 .bytes 파일)
    navmesh project view
    The Quantum navmesh files will show up in the project view
  • 베이크한 Quantum navmesh를 시각화하려면 MapNavMeshDebugDrawer를 Navmesh GameObject에 추가하고 BinaryAsset 아래에 .bytes 파일을 연결합니다.
    navmesh gizmos
    Navmesh gizmos are rendered into the non-running scene using the MapNavMeshDebugDrawer script
  • 플레이 모드 중 내비게이션을 시각화하려면 QuantumEditorSettings에서 'Draw Nav Mesh를 선택하십시오.

맵에 있는 모든 MapNavMeshUnity 스크립트는 맵을 베이킹하는 동안 평가됩니다. 그러나 글로벌 유니티 나브메쉬 베이킹은 나브메쉬를 한 개만 생산하기 때문에 맵에 여러 개의 나브메쉬를 추가하는 것만이 의미가 있습니다.

  • 표면 추가 기능을 사용하여 여러 항법 표면을 제어할 때 사용합니다.
  • 수동으로 네비게이션을 그리는 경우: MapNavMeshUnity 대신 MapNavMeshDefinition을 사용하십시오(퀀텀 V1 설명서 참조).
  • 또는 여러 유니티 탐색기 베이킹 반복 중에 맵의 일부를 활성화 및 비활성화하는 사용자 지정 베이킹 로직을 작성할 수도 있습니다.

선택적으로 모든 씬 저장, 재생 모드 변경 또는 빌드 이벤트에서 Navmesh 베이킹을 자동으로 실행할 수 있습니다. QuantumEditorSettings의 편집기 기능을 참조하십시오.

navmesh auto baking

Quantum은 navmesh가 원점에만 위치하도록 지원합니다. 고정점 산술의 정밀도로 인해 게임플레이가 원점과 가까운 곳에서 합리적인 확장으로 이루어지는 것을 권장합니다.

불러오기 설정

Weld Identical Vertices 유니티 NavMesh는 연결되지 않은 삼각형의 모음입니다. 이 옵션은 매우 중요하며 공유 정점을 결합합니다.
Weld Vertex Epsilon 엡실론을 너무 작게 만들지 마십시오. 융합하는 데 필요한 꼭짓점을 놓칠 수 있습니다. 또한 이 값을 너무 크게 만들지 마십시오.
Delaunay Triangulation 이 옵션은 가져온 Unity Navmesh를 Delaunay 삼각측량과 함께 사후 처리하여 더 고르게 분포된 삼각형을 생성합니다(긴 삼각형의 순서를 다시 매김).
Delaunay Triangulation Restrict To Planes 3D 네비게이션에서는 Delaunay 삼각측량이 삼각형을 재배치하는 동안 경사면에서 네브메쉬를 변형시킬 수 있습니다. 이러한 행동은 유니티의 Navmesh에서도 눈에 띄며, Navmesh 높이를 게임 플레이에 사용할 때(예: Navmesh에서의 보행) 게임에 영향을 미칠 수 있습니다. 삼각망을 동일한 평면에 있는 삼각망으로 제한하려면 이 옵션을 선택합니다.
Fix Triangles On Edges 불러온 정점은 때때로 다른 삼각형 모서리에 놓여 있기 때문에 원하지 않는 테두리가 탐지됩니다. 이 옵션을 사용하면 이러한 삼각형이 분할됩니다.
Closest Triangle Calculation 내비게이션이 없는 맵 그리드의 영역은 가장 가까운 이웃을 감지해야 합니다. 이 계산은 매우 느립니다. SpiralOut 옵션이 훨씬 빠르지만 예비 삼각형이 null일 수 있습니다.
Closest Triangle Calculation Depth SpiralOut을 사용할 때 각 방향으로 삼각망을 검색할 셀의 수입니다.
Enable Quantum_XY QUANTUM_XY 정의가 설정된 경우에만 표시됩니다. 이 기능을 켜면 Navmesh 베이킹이 Y와 Z를 뒤집어 XY 평면에서 생성된 Navmes를 지원합니다.
Min Agent Radius Navmesh에서 지원되는 최소 에이전트 반지름입니다. 이 값은 네브메쉬와 시각적 경계 사이의 여유입니다. 편집기에서 베이킹할 때 유니티 navmesh 베이크 설정(또는 표면 설정)에서 검색하여 값을 덮어씁니다.

유니티 Navmesh 표면 추가 기능을 사용하면 다음과 같은 이점이 있습니다.

  • 런타임 navmesh 계산이 가능합니다(클라이언트 전체에 걸쳐 결정적으로 수행될 수 없으며 생성된 navmesh 이진 데이터를 전송해야 함).
  • 여러 개의 네비게이션을 쉽게 만들 수 있습니다.
  • NavMeshModifier 스크립트를 사용하면 유니티 navmesh island문제를 완화하는 데 도움이 됩니다(Quantum FAQ 참조).
  • 내부 설정을 보다 효과적으로 제어합니다.

여러 표면을 NavMeshSurfaces 목록에 추가하여 Quantum 네비게이션에 연결할 수 있습니다. 한 navmesh의 맵 굽기 도중 장면의 다른 표면은 일시적으로 비활성화됩니다.

navmesh surfaces
Quantum supports the Unity Navmesh Surface Addon

사용자 지정 베이킹 옵션

MapNavMeshBaker.BakeNavMesh()는 Quantum Navmesh 베이킹의 필수적인 방법이며 입력 데이터로 MapNavMesh.BakeData를 사용합니다. 기본 구성에서 베이크 데이터는 가져온 유니티 navmesh 삼각측량에서 생성됩니다. 사용자 정의 설정에서는 사용자가 직접 해당 데이터 구조체를 채울 수 있습니다. 기본적으로 삼각형 수프입니다.

navmesh 베이킹을 다양한 방법으로 사용자 정의할 수 있습니다.

  • MapDataBakerCallback에서 파생된 정적 코드를 베이킹 파이프라인에 추가합니다.
    • 파이프라인에 기존 수정하거나 새로운 MapNavMesh.BakeData를 주입하려면 OnCollectNavMeshBakeData를 구현하십시오.
    • 'OnCollectNavMeshes를 구현하여 기존 NavMesh 개체를 수정하거나 직렬화할 새 NavMesh 개체를 추가합니다.
    • OnBeforeBakeNavMesh 또는 OnBakeNavMesh를 구현하여 베이킹을 완전히 맞춤화하거나 사전 또는 사후 가공을 수행합니다.

C#

public abstract class MapDataBakerCallback {
  /// <summary>
  /// Is called before any navmeshes are generated or any bake data is collected.
  /// </summary>
  public virtual void OnBeforeBakeNavMesh(MapData data) { }

  /// <summary>
  /// Is called during navmesh baking with the current list of bake data retreived from Unity navmeshes flagged for Quantum navmesh baking.
  /// Add new BakeData objects to the navMeshBakeData list.
  /// </summary>
  /// <param name="navMeshBakeData">Current list of bake data to be baked</param>
  public virtual void OnCollectNavMeshBakeData(MapData data, List<MapNavMesh.BakeData> navMeshBakeData) { }
  
  /// <summary>
  /// Is called after navmesh baking before serializing them to assets.
  /// Add new NavMesh objects the navmeshes list.
  /// </summary>
  /// <param name="navmeshes">Current list of baked navmeshes to be saved to assets.</param>
  public virtual void OnCollectNavMeshes(MapData data, List<Quantum.NavMesh> navmeshes) { }

  /// <summary>
  /// Is called after the navmesh generation has been completed.
  /// Navmeshes assets references are stored in data.Asset.Settings.NavMeshLinks.
  /// </summary>
  public virtual void OnBakeNavMesh(MapData data) { }
}

MapDataBakerCallback의 메소드는 맵 베이킹 과정에서 반사되어 호출됩니다. 어셈블리 정의 밖의 공용 클래스에 메서드를 입력하십시오. GameObject를 인스턴스화할 필요가 없습니다. 맵 자산 베이킹 파이프라인에 대한 자세한 내용은 매뉴얼의 에셋 페이지를 참조하십시오.

Pathfinding 시각화

씬 뷰에서 경로 기즈모를 보려면 QuantumEditorSettings에서 Pathfinder Gizmo Draw Pathfinder Funnel을 활성화합니다.

유니티에서는 메인 스레드에만 액세스할 수 있으므로 SimulationConfig에서 항상 기즈모가 작동하도록 Thread Count를 1로 설정합니다.

Back to top