Quick answer: Reduce the bake Agent Radius (Navigation → Bake) so the navmesh extends fully into corners, turn off Auto Braking on the agent for chase behaviors, and call ResetPath() + SetDestination() when an agent stalls for more than half a second.

Enemies chase the player around the first wall just fine, then freeze at every doorway like they hit an invisible wall. The navmesh looks correct in the editor but the agent is parking itself an inch short of the navmesh edge. The real culprit is almost always Agent Radius.

The Symptom

NavMeshAgent.remainingDistance never reaches stoppingDistance. The agent stops one body-radius away from the corner. velocity is zero. desiredVelocity points correctly toward the destination. Restarting the path does not help.

The Three Common Causes

Cause 1: Bake Agent Radius too large. The navmesh is shrunk inward by Agent Radius from every wall during bake. If your Bake Radius is 0.5 and your hallway is 1.0 wide, the navmesh in that hallway is a single line with no width. The agent can’t stand on it without overlapping a wall. Fix: lower bake radius until the hallway has visible walking surface.

Cause 2: Auto Braking on every waypoint. Auto Braking decelerates as the agent approaches its current destination. If you SetDestination once at the final goal it works fine; if you SetDestination every frame to the player’s position it works fine; but if you have waypoint patrol logic that hops the destination forward, Auto Braking pauses at each waypoint. Fix: disable for chase, leave on for stop-at-end.

Cause 3: Carve or path invalidation. If a NavMeshObstacle with Carve is moving, the navmesh is being modified mid-path. The agent’s current path goes through what is now a hole. Fix: detect the stall and reissue.

The Fix

public class RobustChase : MonoBehaviour
{
    public NavMeshAgent agent;
    public Transform target;

    private float _stallTimer;
    private Vector3 _lastPos;

    void Start()
    {
        agent.autoBraking = false;        // chasing, not stopping
        agent.SetDestination(target.position);
    }

    void Update()
    {
        agent.SetDestination(target.position);

        var moved = (transform.position - _lastPos).sqrMagnitude;
        _stallTimer = moved < 0.0001f ? _stallTimer + Time.deltaTime : 0f;
        _lastPos = transform.position;

        if (_stallTimer > 0.5f && agent.hasPath)
        {
            agent.ResetPath();
            agent.SetDestination(target.position);
            _stallTimer = 0f;
        }
    }
}

Tuning the Bake

Open Window → AI → Navigation → Bake. Match Agent Radius to your smallest agent that uses this navmesh. If you have small enemies and a big boss, use multiple Agent Types and bake a separate navmesh per type.

Lower Step Height to 0.1× your character’s height. Default 0.4 is too tall for most humanoid agents and excludes small ledges that should be walkable.

Verifying

Show navmesh in Scene view (Navigation window → Show NavMesh). Walk along corridors mentally; if a corridor narrows to a sliver or breaks at corners, your bake radius is too high for that geometry. Either widen the geometry or shrink the bake radius.

“Bake radius matches your smallest agent. Auto braking off for chase. Reissue destination on stall. Agents move.”

Related Issues

For agents falling off edges, see NavMesh ledge fall. For multiple agent types, see multiple agent types.

Bake radius. Auto braking. Reset on stall. Agents move.