I want to make an FPS controller that feels realistic, like when you move you really feel that your character has mass. In Unity I would’ve done that with RigidBody, but how do I do that in Godot 4.3.1 with CharacterBody3D? I know that RigidBody3D is not suitable for character controllers. May anyone show me the direction in which I shall dig?

  • CaptDust@sh.itjust.works
    link
    fedilink
    arrow-up
    6
    arrow-down
    1
    ·
    edit-2
    8 months ago

    Who told you rigid body isn’t suitable for characters? If you’re comfortable with the concepts of a physics engine and don’t mind using impulses, force integrators and other physics-driven locomotion, I see no reason to avoid a RB character.

    For most use cases, rigidbody just a bigger challenge to get simple things “working right”, and the precise control a kinematic body provides tends to be favorable.

  • Klaymore@sh.itjust.works
    link
    fedilink
    arrow-up
    3
    ·
    8 months ago

    There’s nothing stopping you from making your player a RigidBody3D if that’s what you’re going for, it’s just CharacterBody3D is more common. You would apply forces and impulses on the player to move them around. You could use a CharacterBody3D but then you might want to program your own calculations for inertia and things like that which change their velocity.

    • Andrew Nitrogenesis@lemmy.worldOP
      link
      fedilink
      arrow-up
      1
      ·
      8 months ago

      I’ve seen that RigidBody3D is not recommended to use for player movement because of some physics stuff in Godot Docs. Is that not the case anymore?

      • Klaymore@sh.itjust.works
        link
        fedilink
        arrow-up
        4
        ·
        8 months ago

        You can’t precisely control the movement of a rigidbody like you can with a characterbody, so most games use a characterbody since that’s what they want. But you can have rigidbodies in a game and apply forces to them, it doesn’t matter if the forces are triggered by input and you happened to have a camera on it and call it a player.