I would recommend using Roblox’s new character controller as it is 100% physics based unlike default humanoids Character controllers | Documentation - Roblox Creator Hub
its also posable to attach the new character controller to humanoids by turning off EvaluateStateMachine Humanoid | Documentation - Roblox Creator Hub
you can also find examples here: Releasing Character Physics Controllers
and once you have done that you will notice that things like Basepart:ApplyImpulse() feel a lot nicer because humanoids lock the character into place