So I'm a little late to this party, but I had this exact situation come up. I want my Kinematic character to push a crate around, but also be able to stand on it. So here's my solution in case anyone else trips over this post in the future:
Since your character is a Kinematic body and gravity only happens if you apply a downward force, then don't do that.
Put another way, apply a downward velocity move_and_slide (vector3(0,-9.8,0))
ONLY when your character is in the air.
Since is_on_floor
won't work in this situation (because your rigid body crate is not a floor), you instead determine this using a downward RayCast coming out of your kinematic character.
If the RayCast's is_colliding== false
, then there's nothing below your character, so turn on the downward force via moveandslide, otherwise, reset the downward force on your character to zero.
This means technically that your kinematic character is floating over the crate, but it looks like it's standing on it. Then when you move off the crate, the RayCast's is_colliding==false
, your script clicks on your downward (gravitational) force until the character hits the ground.
Hope that helps.