Updating NavMeshAgent position on NavMesh

I’ve got a weird bug when trying to use Unity’s standard NavMesh to control a physics controlled character. My agent UpdatePosition and UpdateRotation are both set to false. As you can see on the screenshot below, the character slipped from the hill and tries to get back on it to eat the cake (the characters are rolling in my game). As you can see in the red rectangle in my screenshot, the pathfinding system still thinks my character is on the hill, so it simply commands to go towards the cake, while in fact he’s at the bottom of the hill.

I tried something basic (see below) to detect if I’m on the right path, but it does not work. I then tried to call agent.ResetPath() manually with Input.GetKeyDown to test the behaviour, and it does not update the agent location on the NavMesh. I call SetDestination every frame, but I tried to call it only when I change target and it doesn’t change anything. Is there any way I could check if my agent is at the right spot and update it if necessary?

if (agent.hasPath && agent.SamplePathPosition(-1, 0.5F, out hit) && (hit.position - transform.position).sqrMagnitude > 1)

Found a workaround-ish, if I detect that my character is stuck (has a low velocity but shouldn’t) for some time, I just use:


Far from perfect, but I guess it’s the best I can achieve with Unity’s NavMesh.

Have you tried something simple like

private var agent : NavMeshAgent;

function Start(){

    agent = GetComponent.<NavMeshAgent>();

function Update(){

    agent.destination = food.position;

Then knock him off track and see if he computes a new path?