Support Forum

RVO questions and square obstacle not working in 3D

With the beta out there it’s a bit hard to find the correct answers since features/answers are changing.

I’m not currently using the beta, but plan to change over down the road.

3D scene - RVOController on RichAI agents using my own move scripts. They avoid other controllers fine for the most part.


SquareObstacle doesn’t work. I can put RVOControllers on objecs or other agents and the bots will path around those. But putting squareObstacle on something like a large cube, they walk right into it and get stuck. It shows up with the red border as an obstacle, but the agents aren’t recognizing it.

How would you handle things like 1000’s of trees. Navmeshcut each tree location or use local avoidance? If local avoidance, what method?

I’m assuming I want to use something like squareObstacle for dynamic things dropped on the ground. Think of a falling tree that may then roll down a hill. Navmeshcut may not make sense because it might require many updates as the object moves, but the agents do need to avoid it.

Are there more tutorials on local avoidance? The current docs cover some topics but don’t really give you a complete step by step setup of how to make all the features work.

Agent speed - when using the default speed agents get stuck on other larger RVO controllers. They only start to avoid properly when cranking up their move speed. Are there other ways to solve that problem?
Although if squareObstacle worked for me then I’d probably be using that instead.

In general would you use navmeshcut or local avoidance if the objects were mostly stationary, but can still be moved around by other dynamic objects? For example, a large stone drops out of the sky creating a path blockage. But it might roll away, or be destroyed. Using navmeshcut I’d have to keep updating the cut when things more or are removed, or just use local avoidance square obstacle?


I’m not quite sure what the status of SquareObstacle is in the current release, but I do know it never worked that well. In the beta version I have even removed it and implemented another solution.

I would recommend using navmesh cutting for static obstacles. Or baking them into the navmesh if possible.

Navmesh cutting would probably work for that too. A lot of movement during a short time is not a problem. But it’s best if it relatively quickly stops so that the navmesh updates don’t have to continue indefinitely.

This may be better solved in the beta. The local avoidance algorithm has been changed quite a bit. Try it out and see if it works better there.

You can also use a RVOController with the locked field set to true as a type of dynamic obstacle. It will be more efficient than a navmesh cut, but it is restricted to a circular shape. And agents will not do as well navigating around them if there are several in a clump.