I want RVO agents to push others out of the way

Hey there. I’m trying to solve a problem where if I send a group of agents to a position, the first agents will reach it just fine, but the ones arriving later will circle around the group, never reaching the position.

I found this thread, from 2013 ( RVO agent pushing other RVO agents ), with a reply mentioning I should set the moving agents’ time horizon lower. I’ve set it to various different values, down to zero. Even tried negative numbers, but the moving agents seem to have no effect on the standing agents. Here’s a video of my attempt: https://streamable.com/nqdcbt
This behavior seems identical to what I had without changing the Time Horizon. Maybe something changed since 2013?

The text above their heads shows their current TimeHorizon. When they reach their destination, I reset it to default.

Again, to be clear, I want moving agents to shove standing agents out of the way, if possible (like StarCraft 2)

Thanks

I found another similar thread (RVO Controller does not reach end of path), which led me to install the beta in order to use RVODestinationCrowdedBehavior (https://arongranberg.com/astar/documentation/dev_4_3_8_84e2f938/rvodestinationcrowdedbehavior.html). The docs even mention StarCraft 2! I’m using this line of code in awake to set it up:

GetComponent<AIBase>().rvoDensityBehavior = new RVODestinationCrowdedBehavior(CrowdedBehaviorEnabled, DensityFraction, ReturnAfterBeingPushedAway);

This stops them from running around in a circle, and they bunch much nicer, but no shoving. That’s a big improvement, but I’d like them to shove. I’m not sure if this method is supposed to enable that behavior and I’m missing something, or if it’s not supposed to.

Thanks

I got it! I needed to set AIPath’s Recalculate Paths Automatically to dynamic! Woohoo! Also, make sure RVOController’s “Lock when not moving” is unchecked

Leaving this here, hopefully it helps someone else out in the future

2 Likes