RTS-style Unit Movement and "Local Avoidance"

I recently integrated Unity Pro’s NavMesh solution to my RTS-like game but was quickly disappointed with the results. Say I have some simple units standing in a line, creating a wall and blocking the pathway. If I take my player controlled unit and try moving him from one side of the “unit-wall” to the other side of the unit-wall, my unit decides to run directly at the wall, rather than just simply navigating around it. In addition, whats worse is that the unit runs into the other units on the wall, and then eventually pushes them aside (all while slowing down significantly). Is this what they call local avoidance? Can you imagine if an RTS like StarCraft allowed you to push your enemies out of your way? Or if your units slowed down tremendously just because they’re clumping up and figuring out how to run together?

Knowing that Unity’s native solution was completely unacceptable, I’m looking for a framework that will let my units in my RTS avoid each other, especially if that means running around each other and not into each other while slowing each other down. I read your documentation and all the tools and features that come with this framework sound impressive, but it’s not clear whether it will actually solve my problem. How can I accomplish my goal here? It this a form of “local avoidance.” Should I be using a different strategy entirely?

Ultimately, I want a pathing solution that will prevent my units from pushing each other around, and rather have them run around each other. Do you think you can shed some light on my confusion?

I’m ready for the Pro version but I really want the answers to the following questions:

  1. Can your framework effectively makes “units” smart enough to navigate around other units in their way instead of running directly into them and shoving them out of the way?

  2. Does your framework support the concept of surrounding/blocking unit movement much like a pack of zerglings do to a hellion or siege tank in StarCraft 2?

  1. Using a grid graph and some clever updating, that is possible, but quite tricky.

  2. RVO agents can be locked into place. Other units will then not be able to push them away. Also just having a bunch of agents in the way for another agent slows it down quite a lot since the other agents would need some time to move out of the way anyway.

Hey! Also research on this topic.
I’m using RVO system to do the 2nd question as OP said.
What I did is making 2 Rich AI walking to eachother, and set their “lock when not moving” on RVOController to true.
The result is that these 2 agents never stop/lock and non-stop circle around each other. Do you have any advice on parameters to solve this?