It’s a stupid black box. If I want it to do something specific, I can’t, I instead have to tweak arcane, poorly documented knobs to get something in the vicinity of what I want. There’s no hooks to do anything meaningful. Everything is poorly coupled.
Baking is horrid. You have to give it a bunch of geometries and settings and hope for the best.
Any baking based on looking at input geometries divorced from any knowledge about the game they’re in is going to be bad, but that’s the only way you can do things in Unity’s setup.
Baking is a good option for games with very, very simple geometry, and for prototyping, but you really want to be able to just feed in the correct mesh based on what you know about your own game. We spent countless hours fighting against thin slivers, bad corners, weird shapes, and other stuff like that.
Also, If I want to have to navmeshes next to each other - say a land-based one for land creatures and a water-based one for water-based creatures - then they’ll automatically connect to a single mesh, which means that water-based things will be partially on land and land-based things will be partially in water. Woop woop.
And the agents are worse:
I can’t meaningfully define how the agent takes corners - it will always hug it as tightly as possible, usually in a way that looks bad. I can’t define how agents avoid each other, just what their radius is. Their radius when taking corners and avoiding each other is tied together.
The agent’s acceleration and deceleration is the same variable, and I can’t do anything about that.
There’s no built-in way to say things like “move by turning”. Instead, the agent moves in a straight path towards it’s target, always. The way you’re supposed to work around that is to use root motion, which is a hack on top of a hack. It also, by default, doesn’t take it’s facing into account when deciding speed.
CalculatePath returns true when it can’t find a path, as long as it can find a partial path.
The navmesh defines the points where the agents can have their center position. This means that all solutions for agents with different radiuses will be bad.
Automatic off mesh links only go down. If you want to automatically be able to jump up, you have to place those out manually.
Stuffing a bunch of agents into a tight corridor doesn’t handle gracefully at all either, last time I checked. Putting a bunch of agents close to each other also performed pretty poorly.
So the agents are dumb, slow, and look bad.