How to write a Custom Movement Mode?

I haven’t tried to implement it so I can’t say anything for sure but you probably don’t want to change the velocity Z = 0 thing. It will only make things more complicated and as you said, the player will stick to the floor anyway so you only need to be concerned about the velocity 2D direction and size. By default the slope doesn’t affect the speed correct, but that’s precisely the kind of stuff you need to change. You usually have the information you need within the hit result of CurrentFloor, so you can kinda scale the acceleration according to the floor normal Z in CalcVelocity. If you really need the Z velocity afterall, you can override MaintainHorizontalGroundVelocity(). That’s the good thing about the character movement component. You can override almost every function so you can hook yourself in pretty much wherever you like.