Make Circles not overlap using trigger collider

I’m struggling to make some Agar.io like game, and one of my issues is to make circle-shaped cells belongs to same controller(user) do not overlap before merging starts.
Since I set my colliders as trigger due to the facts that cells from different controller should be able to overlap each other, and that there are so many controllers to assign each controller to different layer, I have to implement non-overlap collision only using triggers.

So I tried with two things : the first is using Hooke’s law. Cells are set that if OnCollisionEnter() or OnCollisionStay() is called, they push each other with force that is proportional to compressed length.
I tried to modify their position using Transform.Translate() also.

However they didn’t worked as I expected - if they collides, they push each other fiercely, even when their compressed length is zero. Basically it seems that this is because they still got their inertia after modifying their velocity, however I couldn’t think how to overcome this problem.

Is there any way to implement this manually?

if you’re using force there are different types of force which act very differently.

If they are simply never supposed to collide you can just have them check their distances from each other and avoid collision all together. If they try to move beyond bounds just limit the movement to only let them get as close as is allowed.

If you are trying for a more organic movement feel you could still do it easily without collision by applying lerps over deltatime when they exceed acceptable boundaries.

if you want to use collision, I’d suggest using lerp and deltatime to increase the speed it moves away, maybe taking into account its currently direction/velocity as well as the new opposing push direction/velocity for a nice bounce feel.