Everything always depends on your design, but here is a short explanation of the common 2 options:
Rigid bodies are entities that are controlled by the physics engine (in every engine), is always recommended to not manipulate their positions by hand but using forces/impulses and let the engine do the rest.
With Godot you have the chance to alter some rules and work with a custom integrator (using _integrate_forces
, look the 3D platformer demo), that way you can modify the body state so it will move where you want to.
KinematicBody, like in every physics engine is just a StaticBody that can have the position changed and is the most recommended to make physic entities controlled by code.
Some engines have additional behavior on KBs, in the case of Godot, adds a special method to use with character controllers, move
test movement and try to translate the body without overlapping, if there is a remainder on the movement vector, it marks the body as "colliding" for the rest of the physics frame.
Moving the KB with translation works as moving a StaticBody, ignoring and overlapping every static and kinematic body (useful for things like moving platforms).
In the Kinematic Character 3D demo, is a body moved by move
and some platforms using translation (via animation) to see how it works.
More options are using areas or just a shape and manually check and correct overlaps the old way.
ps: The actual implementation of KinematicBody (just the 3D one) have some problems with move
and layers and masks (looks like is using just layers), if you are going to use that, do some collision tests first.