Importing A Unity Navmesh
퀀텀에 navmesh를 가져오는 가장 일반적인 방법은 Quantum binary navmesh를 가져와 Quantum binary navmesh로 베이킹하는 것입니다.
유니티 Navmesh 불러오기
- 유니티 씬을 글로벌 Navmesh Baker 또는 Navmesh Building Components (Navmesh Surfaces)중 하나를 사용하여 생성합니다.
- 맵(Quantum
MapData
스크립트) 아래 새로운 GameObject를 생성하고MapNavMeshUnity
스크립트를 추가합니다. GameObject의 이름은 나중에 Quantum navmesh의 이름이 될 것입니다. - 맵을 선택하고
Bake All Mode
를Everything
으로 전환한 후 Bake All을 누르고 로그에서 오류를 확인합니다. 다음과 유사한 로그 메시지가 예상됩니다:Imported Unity NavMesh 'Navmesh', cleaned up 1211 vertices, found 7 region(s), found 4 link(s)
- Quantum navmesh 가 나타나게 됩니다..
- ..Quantum 맵 에셋
NavMeshLinks
아래 - ..맵 에셋 파일 옆의 프로젝트 뷰 내부 (하나의 Quantum 에셋 파일과 하나의 바이너리
.bytes
파일)
- ..Quantum 맵 에셋
- 베이크한 Quantum navmesh를 시각화하려면
MapNavMeshDebugDrawer
를 Navmesh GameObject에 추가하고BinaryAsset
아래에.bytes
파일을 연결합니다. - 플레이 모드 중 내비게이션을 시각화하려면
QuantumEditorSettings
에서 'Draw Nav Mesh
를 선택하십시오.
맵에 있는 모든 MapNavMeshUnity
스크립트는 맵을 베이킹하는 동안 평가됩니다. 그러나 글로벌 유니티 나브메쉬 베이킹은 나브메쉬를 한 개만 생산하기 때문에 맵에 여러 개의 나브메쉬를 추가하는 것만이 의미가 있습니다.
- 표면 추가 기능을 사용하여 여러 항법 표면을 제어할 때 사용합니다.
- 수동으로 네비게이션을 그리는 경우:
MapNavMeshUnity
대신MapNavMeshDefinition
을 사용하십시오(퀀텀 V1 설명서 참조). - 또는 여러 유니티 탐색기 베이킹 반복 중에 맵의 일부를 활성화 및 비활성화하는 사용자 지정 베이킹 로직을 작성할 수도 있습니다.
선택적으로 모든 씬 저장, 재생 모드 변경 또는 빌드 이벤트에서 Navmesh 베이킹을 자동으로 실행할 수 있습니다. QuantumEditorSettings
의 편집기 기능을 참조하십시오.
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 Surfaces 사용하기
유니티 Navmesh 표면 추가 기능을 사용하면 다음과 같은 이점이 있습니다.
- 런타임 navmesh 계산이 가능합니다(클라이언트 전체에 걸쳐 결정적으로 수행될 수 없으며 생성된 navmesh 이진 데이터를 전송해야 함).
- 여러 개의 네비게이션을 쉽게 만들 수 있습니다.
NavMeshModifier
스크립트를 사용하면 유니티 navmesh island문제를 완화하는 데 도움이 됩니다(Quantum FAQ 참조).- 내부 설정을 보다 효과적으로 제어합니다.
여러 표면을 NavMeshSurfaces
목록에 추가하여 Quantum 네비게이션에 연결할 수 있습니다. 한 navmesh의 맵 굽기 도중 장면의 다른 표면은 일시적으로 비활성화됩니다.
사용자 지정 베이킹 옵션
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로 설정합니다.