How to use NavMeshSurface and NavMeshModifier to build navmesh with obstacles at runtime?


I have a simple situation with N vehicles controlled by NavMeshAgents and K polygonials obstacles meshes, build with Triangulation methods.

I would like to have a NavMesh automatically built at runtime after all my obstacles are placed on the map.

First I managed to use NavMeshObstacle, by setting the height of my polygons meshes around 0.2, so my N NavMeshAgent would avoid the obstacles.

However the Obstacles hitbox are boxes and not adapted to triangles, etc.

I found that it is possible to do what I want at runtime, with GitHub - Unity-Technologies/NavMeshComponents: High Level API Components for Runtime NavMesh Building.

But I don’t know how ? Should i set NavMeshSurface on each obstacles? On the global plane? When and How should I build the NavMesh?

I am very confused, I know this is very possible but I am lost on how to use the advanced nas mesh tools.

I am only looking for advices.

Thank you very much if anyone could help me to go in the right direction.


Welcome to using the very experimental NavMeshComponents!

I haven’t tried this, so I’m not sure this will result in what you would like. I think you need a NavMeshSurface component attached to the geometry of your scene and set the Use Geometry part to “Use Colliders”. Then you assign your obstacle objects as children of the game object that has the NavMeshSurface, and you use convex MeshColliders for your obstacles. Finally, during run-time you call NavMeshSurface.Bake(). Additionally, decreasing the voxel size may result in finer detailed navmeshes (at the expense of baking time).

Please see the official manual about NavMeshComponents here for more information. Good luck!