Roblox humanoids have a self correcting system where they will always face straight up (the humanoid root part)
This means that physics objects will not work, since the forces are consistent throughout the whole assembly (Any parts with joints connecting together, which is the entire character).
The only solution that I can imagine involves modifying the root-torso motor, but I don’t know how to actually calculate that.
Hello, see my post on this other discussion. It’s a similar problem to yours and the proposed solution should work here too.
TL:DR
You need to raycast to find the surface normal (which is the vector perpendicular to the hit surface), then set the character’s CFrame via :PivotTo() to have the normal vector as its UpVector.
I’m sorry. I tried to look for other discussions that covered my question, but searching for keywords didn’t find anything. Thanks for linking it here.