# Technical Details

Unity’s **AI Navigation** package does support runtime navmesh baking internally, but it exposes only a very low-level API.\
There is no editor tooling, no service layer, and no practical workflow for most teams.

The **Runtime NavMesh Baker** wraps these APIs in a structured, service-based system with intuitive inspectors, menu items, events, and samples — so designers, programmers, and technical artists can all configure runtime baking without writing custom infrastructure.

***

### Core Features

#### Coordinator-First Workflow

* The **BakerCoordinator** component is the main entry point.
* Owns a **NavMeshBakeProfile** (asset with all settings) and a **Center Target** (e.g., player or camera).
* Automatically attaches and manages the underlying **NavMeshBakerService**.

#### Service-Based Architecture

* **NavMeshBakerService** manages:
  * Dirty queueing and async bake scheduling
  * Continuous AABB baking, Grid Cell streaming, or One Shot baking
  * Agent expansion, seam link building, and concurrency control
* Normally hidden from end users — accessed via the Coordinator.

#### Dynamic Surfaces

* **DynamicNavMeshSurface** wraps Unity’s `NavMeshSurface`.
* Registers automatically with the Coordinator (optional auto-register).
* Provides inspector buttons to mark itself dirty, register/unregister, and ping its surface.

#### Profiles

* **NavMeshBakeProfile** ScriptableObjects hold all bake parameters:
  * Bake mode (**Continuous AABB**, **Grid Cells**, **One Shot**)
  * Bounds sizes, cell dimensions, hysteresis, and rebake intervals
  * Agent types, default area, and area costs
  * Concurrency limits and seam-link options
* Multiple profiles can be created and swapped quickly.

#### Event Hooks

* **BakerEvents** exposes static events:
  * `OnBakeStarted`, `OnBakeCompleted`, `OnBakeFailed`
  * `OnCombinedBakeStarted`, `OnCombinedBakeCompleted`
  * `OnOneShotBakeStarted`, `OnOneShotBakeCompleted` *(new in 1.4.0)*
* Ideal for gameplay hooks (e.g., spawning AI when the navmesh is ready).

#### Spawner Integration *(new in 1.4.0)*

* **NavMesh Placement Policies** on `SpawnEntry`:
  * *Require* → spawn only once a valid NavMesh exists (deferred if needed)
  * *Prefer* → spawn immediately; agent enables once navmesh is available
  * *Ignore* → place regardless of navmesh state
* **Deferred Placement Queue** ensures Require-policy spawns retry until successful.
* **Spawn Hints** (`EnemySpawnHintPoint` components) let designers author preferred spawn anchors with per-hint rules.

#### Seamless AI Integration

* Works directly with Unity’s built-in `NavMeshAgent`, `NavMeshQuery`, and `NavMesh.SamplePosition`.
* Agents automatically re-path when new bakes complete.

#### Non-Destructive Workflow

* Combine **static editor-baked navmeshes** with runtime baking.
* Useful for hybrid projects: static base levels + procedural/dynamic zones.

***

### System Architecture (At a Glance)

```
[ Unity NavMesh System (AI Navigation package) ]
        ▲
        │ (low-level runtime APIs: NavMeshData, UpdateNavMeshDataAsync)
        │
[ NavMeshBakerService ]
    - Centralized runtime baking logic
    - Manages DynamicNavMeshSurfaces
    - Async scheduling, dirty queues, perf metrics
    - Dispatches BakerEvents (per-surface, combined, one-shot)
        ▲
        │
[ BakerCoordinator (MonoBehaviour) ]
    - Primary entry point for users
    - Owns NavMeshBakeProfile + Center Target
    - Auto-registers child DynamicNavMeshSurfaces
    - Provides friendly methods: StartBaking, BakeAllNow, RunOneShotBake
        ▲
        │
[ Inspector & Editor Tooling ]
    - Quick Setup menu, asset creators, Bake Monitor window
    - Dynamic Surface inspector (mark dirty, register/unregister)
    - Spawn Hints inspector (new in 1.4.0)
```

This layered design separates the runtime engine (**Service**) from the editor/user entry points (**Coordinator, inspectors, menus**), making it both production-ready and approachable.

***

### Dependencies

* Unity **2022.3 LTS** or newer
* **AI Navigation** (`com.unity.ai.navigation`) – required core package
* Optional / samples only:
  * **TextMesh Pro** – used in sample UIs
  * **Cinemachine** – used in sample scenes for player camera control


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://megacrush.gitbook.io/megacrush-unity-assets/runtime-navmesh-baker/runtime-navmesh-baker-user-manual/technical-details.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
