How can we prevent units from pushing against each other when finding ways to avoid obstacles?

I am doing RVO obstacle avoidance, but the effect achieved is that after the NPC approaches the protagonist, it will stick to the protagonist until it leaves.

What should I do to make the effect that when the npc is about to hit the protagonist, the npc will go around immediately?

This is my rvo configuration,the radius of all units, and the radius of the collision box are 0.3.

        private void PathFindMove()
            if (m_currentWaypoint >= m_path.vectorPath.Count)

            m_rvoController.SetTarget(m_path.vectorPath[m_currentWaypoint], CurrentMoveSpeed, CurrentMoveSpeed);

            var movementDelta = m_rvoController.CalculateMovementDelta(Time.deltaTime);
            m_controller.Move(new Vector3(movementDelta.x, m_character.velocity.y, movementDelta.z));

This is the code for my unit to move. I will set the next navigation node as the target of rvoController, CurrentMoveSpee is the current moving speed, then take out the offset, and finally let the characterController move. The value of the y-axis can be ignored, this is just a realization of our height value.

So is there something wrong with my code, or is rvo sticking to it all the time?
I saw an example of the demonstration scene, and it seems that the units are walking next to each other when they are about to collide.


Does your protagonist also have an RVOController or is the player’s movement done in another way?

Yes, all my characters also have RVOController and the distance they move is rvoController.CalculateMovementDelta


Do you have a video of this happening?