Pawn getting stuck on corner of nav mesh, despite accurate agent radius

Hi folks. I’ve got a 2D project with a crippling navigation issue happening:

I want a zombie character to path towards a rat so that he can attack it. I’ve put a navigation blocker in the way to test his AI. His AI works completely as intended, but since I added the navigation blocker, the whole thing falls to pieces. The zombie cannot properly navigate to the rat as he always gets caught on the corners of the navigation mesh, and appears to get caught outside the mesh, never finishing the movement.

Anyone able to help?

So facts to note:

  • The Project Settings > Engine - Navigation System > Agent, Agent Radius is set to 8.
  • Increasing or decreasing this number sees the Zombie walking closer or further away from the Navmesh modifier volume, but always getting stuck on the same corner.
  • The Zombie has a collision radius of 7.5 (also tested with 8, far smaller, and far larger).
  • The Zombie’s pawn movement updates based on the collision radius (as by default). Values seen in the Movement component while playing in-editor indicate this is functioning properly.
  • I have tried turning this off and manually setting it. This changes the values properly, but the Zombie still gets stuck on the corner.
  • The Nav Mesh bounds volume supports the Agent from the Project Settings (reads the profile by name, and uses the signature yellow color).
  • The Zombie is not colliding with objects, other than the floor.
  • At no time does the movement fail.
  • Speeding up the zombie significantly results in the zombie still getting caught on the corners, but only momentarily before breaking through. He seems very fixated on taking the absolute shortest route there.
  • Similarly, if the framerate somehow tanks (happens when I use alt-tab to regain my mouse) the Zombie moves past the corner.
  • The problem still occurs if I place a cube down to block navigation, instead of a blocker.
  • The Zombie is being told to move via a custom Behavior Tree task. The node is “Move to Location or Actor”, and is using pathfinding, “LockAILogic”, and “Use Continuos [sic] Goal Tracking”.
  • “Accept Partial Pathing” is set to default, and the AI behaves the exact same if “Accept Partial Pathing” is set to false.
  • Bumping the Zombie into the nav-blocker using my in-game mechanics allows it to walk through the nav-blocking volume and properly finish its route. Bumping the Zombie back around a corner will cause him to get stuck on that corner again.
  • Navigation has been rebuilt several times.
  • The Zombie instance has been deleted and placed back several times.
  • The Nav Mesh has been deleted and placed back several times.
  • Unreal has been restarted at least twice.

Images

Level:

Result:

258985-100-result.png

Project Settings:

In-Game Pawn Movement Settings:

258988-in-game-pawn-movement.png

So I’ve uncovered what I could best describe as a pseudo-solution.
After playing around with the debugger and the visualizer, I’ve uncovered some odd occurrences. The zombie hits the corner with 1 Gameplay task, before getting stuck.

259076-works.png

A few moments later, the gameplay task just disappears. The movement doesn’t fail, but the async process ends- somehow.

259077-until-it-doesnt.png

With a “”“solution”"" of checking every .1 seconds if the async process still exists or not, I can manually force it to continue along it’s path. It looks awful, and takes several seconds, but the zombie does properly make his way to the rat and do his thing.

Still looking for a better solution but I can only presume now is an engine bug.

As far as I’m aware this is still an issue. This happens with my ai and navigation, should be posted as a bug that needs fixed imo.

I believe there is an option on navigation blocking volumes just discourage navigation there rather than outright halting it. Maybe just setting it to that lighter setting would still allow the AI to pass the spot it “isn’t supposed to be in” more easily? It should still try to avoid most of the area to the best of its ability.

Did you manage to solve the problem? UE5 has the same problem. When the option is disabled “FloatingPawnMovement->Planar Movement” it works fine, but this is not a solution…

Something for people seeing this currently and in the future: Try clicking the NavMeshBoundsVolume on the Outliner and going to Advanced > Use CCD, and turn it on.
The complex collision detection seems to have fixed characters getting caught on the edges for me.