Search Unity

Kinematic vs Rigidbody controller for a FPS: Am I crazy?

Discussion in 'Game Design' started by Thrazamund, Aug 27, 2020.

  1. Thrazamund

    Thrazamund

    Joined:
    Apr 14, 2017
    Posts:
    36
    Hello,

    I've been playing around with some very impressive rigidbody controllers on the asset store and they're great. That being said I can't get past the feeling that the default unity character controller with some slight modifications just feels better to me. I'm having a lot of trouble coming up with why this could be. I don't know if years of playing FPS games that did not use rigidbodies have instilled this in me. Or something about actually simulating physics isn't as responsive as "faking" it. Even if I turn up the acceleration in the rigidbody controller to instant I still always feel like I'm pushing something around where the character controller just feels like I'm moving.

    My knowledge on how either controller works on a fundamental level is very limited. I don't know if there's some technical reason why this could be. Obviously rigidbody controllers are much better in some type of games but I'm just talking about the feeling of moving around on a flat plane. I'd love to hear anyone else's opinions or thoughts. Am I imagining all of this?
     
  2. angrypenguin

    angrypenguin

    Joined:
    Dec 29, 2011
    Posts:
    15,620
    It's not, and it can't be. I'm not sure about you, but I'm not a capsule which moves around as a result of being pushed by magical forces. In fact, I'm not a solid ("rigid") body at all!

    Either way, when it comes to implementing a walking person you're very much faking it. And there's more to it than that. A real person doesn't move around by looking in a direction and going "forwards", and so on and so forth.

    Old-school character controllers feel better to a lot of people because it's a more effective fakery for the kinds of interaction some games rely on. It allows the controller to more responsively do what the player wants because the code can directly do it, as opposed to a simulated physics approach where the code instead has to approximate and apply forces which it thinks will get the desired results. Both work well in some situations.

    Or you could go the GTA route and actually simulate a walking person. Even that's not perfect, because many people find it unresponsive. When a real person wants to change direction it may take well over a second to physically turn and redirect their momentum, but they don't notice it. When you have to hold a controller in a direction for that long to get the desired result it feels slow.

    When designing a character controller I always start from the requirements of the game. Does it need to natively interact with physics objects? If so then being a Rigidbody is useful, not because of the "realistic" simulation but because it'll react to external forces and such, and it'll naturally exert forces on other bodies. From there I'll design controls and interactions based around forces being exerted on the character, or maybe directly modifying its velocity. On the other hand, if responsiveness is a key goal then I don't want a complex physics system messing with it, so I'll avoid direct use of physics. Now I can precisely tune my responsiveness and feel, but any non-trivial physical interactions will have to have support explicitly provided. That's ok, though, because I probably want precise control over those as well. Eg: picking up a heavy item probably shouldn't have a realistic effect.
     
    Martin_H and Ryiah like this.