I’m making a 2d platformer, and I want to be able to run up a slope and then up the wall. To do this, I am able to find the normal of the ground, and use it to determine which way I should orient the character. My problem comes when trying to rotate the character to this angle. It is a rigidbody being moved by forces. At first, I was able to rotate its transform to the desired angle, but that would cause it to intersect with the wall I am trying to run on. I then tried to rotate its transform using the bottom of the feet as the pivot, but that seems to mess up the characters motion. I then tried to rotate the rigidbody using physics. Setting the angular velocity myself didn’t work right, I would set an angular velocity of, say, -.7, and it would turn to the wrong angle with an angular velocity of 506. It would stabalize at a certain angle, but it would be leaning into the slope, rather than away from it. I tried the rigidbody.MoveRotation, but the angle it ended up with was strange. For instance, moving it to 0 ended up with an angle of -17.74 degrees. This persisted even if I had the character jump, so I am in midair away from any obstacles. If I selected isKinemetic on my rigidbody, then it just rotates to 0.
I feel like this should be simple to accomplish, but every technique I have tried fails to work. What is the proper way to do this?