BabylonJS/Babylon.js · error · Error

There is no navMesh generated.

Error message

There is no navMesh generated.

What it means

createDebugNavMesh (RecastNavigationJSPlugin.ts:225) throws this when plugin.navMesh is undefined, i.e. no navigation mesh has been generated (or generation failed) on this plugin. The debug visualization is built directly from the generated NavMesh, so without one there is nothing to render. Like the crowd error, this is an ordering/state error: call it only after a successful createNavMesh/createNavMeshAsync.

Source

Thrown at packages/dev/addons/src/navigation/plugin/RecastNavigationJSPlugin.ts:225

    public async createNavMeshAsync(meshes: Array<Mesh>, parameters: INavMeshParametersV2): Promise<CreateNavMeshResult> {
        if (!this.createNavMeshAsyncImpl) {
            throw new Error("Function not injected yet. Use the factory to create the plugin.");
        }

        this._preprocessParameters(parameters);

        const result = await this.createNavMeshAsyncImpl(meshes, parameters);
        return this._processNavMeshResult(result);
    }

    /**
     * Create a navigation mesh debug mesh
     * @param scene is where the mesh will be added
     * @returns debug display mesh
     */
    public createDebugNavMesh(scene: Scene): Mesh {
        if (!this.navMesh) {
            throw new Error("There is no navMesh generated.");
        }

        if (this.navMesh && this._tileCache) {
            WaitForFullTileCacheUpdate(this.navMesh, this._tileCache);
        }

        return CreateDebugNavMesh(this.navMesh, scene);
    }

    /**
     * Get a navigation mesh constrained position, closest to the parameter position
     * @param position world position
     * @returns the closest point to position constrained by the navigation mesh
     */
    public getClosestPoint(
        position: IVector3Like,
        options?: {
            /**

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Generate and await the navmesh first: `await plugin.createNavMeshAsync(meshes, params);` then call createDebugNavMesh.
  2. Guard with `if (plugin.navMesh)` before calling createDebugNavMesh.
  3. If generation was attempted, check why it failed (empty geometry, bad parameters, worker payload issue) — the debug call is only the symptom.
  4. In worker mode, ensure you used createNavMeshAsync (sync createNavMesh never populates navMesh).

Example fix

// before
const plugin = await CreateNavigationPluginAsync();
const debugMesh = plugin.createDebugNavMesh(scene); // throws: no navMesh

// after
const plugin = await CreateNavigationPluginAsync();
await plugin.createNavMeshAsync(meshes, params);
const debugMesh = plugin.createDebugNavMesh(scene);
Defensive patterns

Strategy: validation

Validate before calling

// Run BEFORE calling createDebugNavMesh
if (!plugin.navMesh) {
    throw new Error("Generate a navmesh first: await plugin.createNavMeshAsync(meshes, params)");
}
const debugMesh = plugin.createDebugNavMesh(scene);

Type guard

function canRenderDebugNavMesh(plugin: RecastNavigationJSPluginV2): plugin is RecastNavigationJSPluginV2 & { navMesh: NonNullable<RecastNavigationJSPluginV2["navMesh"]> } {
    return plugin.navMesh != null;
}

Try / catch

try {
    const debugMesh = plugin.createDebugNavMesh(scene);
} catch (e) {
    if (e instanceof Error && e.message.includes("no navMesh generated")) {
        Logger.Warn("Skipping debug navmesh: generate the navmesh before rendering debug output");
    } else { throw e; }
}

Prevention

When it happens

Trigger: Calling plugin.createDebugNavMesh(scene) before createNavMesh/createNavMeshAsync was called or before its promise resolved; after generation failed; on a worker-mode plugin where only the disabled sync createNavMesh was invoked; or on a freshly constructed plugin with no generation at all.

Common situations: Debug-rendering setup code that runs during scene init while async generation is still in flight; navmesh generation failing due to bad geometry/parameters and the failure being unnoticed until debug render; calling the sync createNavMesh on a worker plugin (which returns null without setting navMesh).

Related errors


AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30). Data as JSON: /api/errors/87e9b4d6010e5954. Report an issue: GitHub.