Update or FixedUpdate for CharacterController?

I know FixedUpdate is ideal from a simulation standpoint for physics. However, when you use it with a CharacterController you absolutely will get visual stuttering (whenever the number of FixedUpdates between Updates is non-constant), because there is no way to cleanly interpolate or extrapolate its position. A CharacterController can move with varying acceleration and have varying collisions, etc. So if you linearly extrapolate the position of its visual representation in Update, there will be a slight stutter whenever it is not moving at a constant velocity.

If you knew your character controller always moved at a constant velocity and never collided with anything, then a linear extrapolation would provide clean animation with no stuttering. I tested this. In Update move the transform of the visual representation to the position of the character controller, plus (Time.time-Time.fixedTime)/Time.fixedDeltaTime*moveVelocityFromLastFixedUpdate.

But a character is going to run into walls, or curved ground, or accelerate when falling/jumping. This will cause stuttering.

So…

I’m thinking Move has to be used from Update to keep the motion clean visually. The Standard Asset examples have a bool for choosing between Update or FixedUpdate, so I take that as an indication that using Update for Move is not a huge mistake. From a gameplay perspective, I don’t think the player will notice something is amiss, since Input is only updated once per frame. One concern I have though: does CharacterController have any protection against tunneling in the event of a low framerate?

10-4,

I think it’s common to turn on interpolation to smooth out the stutter you’re describing. Or you can set it under RigidBody in the inspector.

Cheers,
Cahman