Difference between a rigidbody and a character controller?

Ostensibly I understand: A Rigidbody will be affected by physics and, by default, collisions with other rigidbodies.

A character controller is kind of a blank slate: Roll your own physics for this object, plus some nice functions (.isGrounded() etc.)

But when do you use each one? For example, in a current 2D project I have a characterController for my player character and use cc.Move() to get him around. Should I also use a cc for my enemies? Or are they better off being rigidbodies? Why?

Also, when moving a rigidbody, what’s my best option? Translate seems wrong: Do you just add forces to the object instead?

I guess I’m just a little foggy and when you;d use each one and why, especially in relation to 2D games.

You can use a CharacterController for anything that’s supposed to be a character in the game (player or NPC_, it can work quite well. You’d use a rigidbody if you wanted Physics, you probably don’t want physics for people who are standing upright - but it can be done!

CharacterControllers automatically handle lots of cool things like platforms and trying to “unstick” characters from each other - but it’s a bit jerky. Personally I keep trying to use them, then write my own because it’s not easy to get it to do exactly what I want, but if you are happy with the movement and it fits your style of game then go for it.

I’d only use physics if you need it (cars, rocks, balls etc etc).