Character woes (CharacterController vs Rigidbody)

I’m building some character objects in my game (none of which are player controllable) and I’m having some troubles with the best route I should be going in terms of how they’re moving. For example sake, I have 2 main ones I’m working with - a Capsule “soldier” and a Cube “tank”.

Originally I was using a Box or Capsule Collider + Rigidbody to transform.Translate them around, and they would bump into each other as expected and do other physics stuff. However I noticed that they would retain inertia or momentum when they bumped into things, which caused the Capsule most noticeably to wobble in weird, uncontrollable directions.

So then I tried changing it to a CharacterController collider and using controller.Simplemove. This removed the inertia wobbling, but they aren’t colliding properly (especially the tank, a square object using a round collider). And they also aren’t pushing each other around with physics. I do realize that both of these are intended side effects of using a CharacterController collider.

My question is - What am I missing? Is there a better way I should be going about this? Ideally I would prefer to use the first method (Box/Capsule Collider + Rigidbody, movement using Translate) but I don’t know if that’s “right” or not.

Thanks!

IRC to the rescue. To people in the future reading this: Use the first method and rigidbody.AddForce() instead of transform.Translate().

Alternatively, you could use:

Controlled velocities: rigidbody.velocity=newVelocity;
Semi-Controlled velocities: rigidbody.velocity = Vector3.Lerp(newVelocity, rigidbody.velocity, damper * Time.deltaTime);

As well as controlled or semi-controlled angularVelocities.