Thanks for the input everyone!
@MagicLord that's indeed a great idea however from my past experience I believe separating player's navigation collision (capsule, cylinder etc) from player's physical collision (skeletal mesh + animations) and later syncing their behavior if required is the best way to go when it comes to troubleshooting.
@Somnivore I'm currently using RigidBody with a capsule collider for the player and 'SetLinearVelocity (some Vector3);' to get things moving. Everything works fine (even slope movement) but as soon as the collider bumps into any sort of a stairstep then player simply stops. Originally I tried to apply some force on y-axis but that comes with some "vibrating" results xD.
@SolarLune forward raycasting to check floor's height is what I'm currently thinking about too. Yes, raycasting works in C# :)
I was wondering if I could somehow force RigidBody to move based on the floor normals as long as a step's height is below a certain value (tracing forward could be useful here unless there's a better method). Not sure if that's possible at all though. Two (or more) brains are always better than one!
Attaching an image in case my description isn't good enough:
