Gravity Manipulation in Unity

I’m trying to implement a “sky beneath” game movement system in Unity, where the player can walk on any surface, including walls and ceilings, maintaining a consistent “downward” force relative to the surface. I’ve attempted different methods, including snapping to walls using raycasts and adjusting gravity, but Unity’s physics engine does not support dynamic gravity changes per object. One idea was to rotate the entire world around the player instead of modifying the player’s orientation, but that introduces complexity with object interactions. Disabling Unity’s physics and using custom directional forces (based on surface normals) seems promising, but movement becomes unstable. I’ve also referenced wall climb logic, but adapting it for free movement across all surfaces remains challenging. How can I correctly implement a smooth, controllable system where the player can walk on any surface dynamically without breaking movement physics? Are there better alternatives to world rotation or custom forces?

By using a custom character controller where someone has spent months reliably enabling features such as wall-walking and gravitational walking on a planet (think: Mario World). Such a character controller is far from trivial.

I can recommend this one. It’s free and contains lots of samples.

You can disable gravity on the player’s rigidbody and add your own “downwards” force to the player. Think of it as a reverse jet pack that pushes the player towards the surface below the player’s feet.