How to write a Custom Movement Mode?

The problem with the walking physics is that, while in that state, the Z velocity is set to 0. The player’s Z position is instead handled by sticking to whatever floor that’s underneath the player. This messes up the transition between the walking and falling states since the Z component velocity gets “eaten”, causing a bad velocity to be inherited by the new state. You can avoid the stickiness by setting MaxStepHeight=0 and I managed modify the Velocity.Z to better reflect the true velocity, but the biggest problem is that the walking state doesn’t consider slopes in any way – other than checking whether it’s walkable or not – and I thought that there had to be a better way.

The code I provided it mostly copied from PhysFlying with added gravity, though I didn’t expect the collision handling to be so bad. I’ll try improving my old solution again, focusing on the CalcVelocity function, and tell you how it went (though it’ll probably take a while). Thank you.