Guidelines for using rigidbody, collider, CharacterControllerScript, etc?

Understanding the physics engine and all the options for controlling game objects can be quite daunting for a Unity newbie. How do I know when to use a rigidbody (kinematic or non-kinematic), a collider, the CharacterControllerScript, or something else?

What are the basic guidelines for what to use, and how/when to use them?

more ▼

asked Nov 02, 2009 at 08:21 PM

Ehren gravatar image

4.9k 68 75 120

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first


Here are some general rules-of-thumb.

  • Static scenery
    • Collider, No Rigidbody
  • Movable scenery/objects
  • Characters
    • CharacterController (includes a Capsule Collider) + Custom control script
    • OR Collider + Custom control script (can cause issues if your character interacts with rigidbodies)
    • OR Collider + Rigidbody (IsKinematic=true) + Custom control script
    • OR Collider + Rigidbody (IsKinematic=false) + One or more Configurable Joints (which can be used to constrain the rigidbody's motion or rotation, if necessary) + Custom control script


When using CharacterController, movement is accomplished by calling the functions exposed by CharacterController. Interaction with other objects (platforms, crates, etc.) is accomplished by implementing the collision events exposed by CharacterController and applying forces to the objects the character collides with, or moving the character in response to the movement of the other objects.

When using a kinematic rigidbody, movement is accomplished by directly modifying your game object's Transform, or by calling rigidbody.MovePosition. (Note: the movement of kinematic rigidbodies should be done in FixedUpdate.)

When using a non-kinematic rigidbody, movement is typically accomplished by calling rigidbody.AddForce and rigidbody.AddTorque, or by setting the rigidbody.velocity and rigidbody.angularVelocity directly.


A good overview of the physics engine, rigidbodies, and colliders can be found in the Physics section of the Unity manual.

DiamondTearz has also compiled a good list of Unity physics tutorials/resources.

About CharacterController

According to the docs, the CharacterController component "is mainly used for third-person or first-person player control that does not make use of Rigidbody physics." In other words, the CharacterController is a handy component you can apply to a game object if you don't want it to be controlled by the physics engine, but you don't want to have to write your own custom controller code from scratch.

Why wouldn't you want your character controlled by the physics engine? Well, oftentimes a character's movement is not physically realistic. A character might run like a rocket-powered cheetah, change directions mid-air, etc.

CharacterController allows you to create this kind of unrealistic movement, but handles many of the basics for you -- things like walking up steps and keeping your character from walking through walls.

Why wouldn't you want to use CharacterController? If your character isn't a human-like entity walking on the ground, it may not be a good fit.

More info on CharacterController can be found here.

more ▼

answered Nov 03, 2009 at 11:22 PM

Ehren gravatar image

4.9k 68 75 120

Very nice post. Excellent overview and summation. Is it in the wiki yet?

Oct 23 at 03:20 PM shavais

DiamondTearz now only has some scented candles in the link you provided...

yesterday cmonroy
(comments are locked)
10|3000 characters needed characters left

Protip: A lot of the default scripts are wrong, for example the old Lerpz tutorial, the FPS tutorial, and the tropical island demo. If you use these scripts as-is and you have a good framerate, you'll notice heavy jittering.

The cause is almost always that the camera updates its position using Update(), but the physics simulation only updates on FixedUpdate(). To avoid jittering, ALL objects which use physics movement, plus the camera, should ONLY change their position in FixedUpdate(), never Update(). Non-physical movements and animations can feel free to update in Update(). The camera is especially sensitive to this, since even slight jittering will affect the whole screen.

more ▼

answered Jun 18, 2010 at 08:57 AM

WarpZone gravatar image

96 5 3

Shouldn't cameras that follow other objects use LateUpdate?

Jun 21, 2010 at 06:54 PM Ehren

This really is a protip, kudos to WarpZone for mentioning this. Warp, I'm sure you agree that the situation is made even more touchy when you are using networking to move objects. You have to be particularly careful in your thinking about what is really done when. The issue came up in this question http://answers.unity3d.com/questions/190028/multiplayer-jitter-caused-by-camera.html which may help others passing here

Dec 11, 2011 at 09:09 AM Fattie
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments



asked: Nov 02, 2009 at 08:21 PM

Seen: 38204 times

Last Updated: yesterday