Is there some technique to code a proper FPS controller?

Hi, I’ve been experimenting with various FPS controllers in the last few weeks but I’m not satisfied at all with them.

I know that the main solutions to this problems are:

  • Using a non-rigidbody controller with full control on movement
  • Using a rigidbody controller

As we all know the non-rigidbody type is a mess with physics and collisions, while the other one gives “its best” with the impossibility to control movement without consequences on the character physics.

Isn’t there a way to code a controller which merges the good parts of booth?
This question sounds a bit stupid but I’d love to see in unity a proper fps controller.
As an example I’d like to mention the half life first person controller: it works nice with physics and collisions yet the movement doesn’t rely on physics.

How can I achieve this kind of FPS controller?
How is movement achieved in any other game “with a character”?(fps or not, like mario 64)

Methinks the most appropriate way to handle this in most situations involves a little hand-coded physics. The player should only be a non-kinematic rigidbody in special circumstances; games centered around vehicles being the most obvious.

Instead, you can detect collisions and respond to them using the basic kinematic equations. Usually. You can satisfy most “bump into rigidbodies” scenarios using this approach. Interacting with objects that rotate on a pivot or hinge might get a little interesting, as well as situations where the player stands on a pile of low-mass objects or tries to push a similar-mass object.

Someone correct me if I’m mistaken, but I think this is considered the most effective approach to a standard character controller dealing with rigidbodies.