What I did to overcome this issue is the following:
Instead of have the capsule slide on the ground, I had a dynamic capsule ride on top of a spring.
I implemented the spring as several ray casts originating from bottom of the capsule.
The length of the spring was like half a meter or less and it would pull and push the capsule to and from the ground.
The grip/pull is important so the character wouldn't jump unexpectedly.
The springs stiffness controls how much bobbing you have.
This had the following effects
- No unwanted collision with edge of geometry on the floor, since the capsule floats
- Walking up stairs and slopes implemented implicitly. The spring would just "step" onto the stair's step and push the character capsule up.
- Implementation of jumping was just matter of releasing the grip on the ground the spring had and giving the body an impulse.
- A landing character after a jump or fall automatically displayed "knee-bending" as you would expect
- Pleasant smoothing of vertical movements in general. Like on elevator platforms etc.
- Due to the grip/pull to the ground, even when running downhill the character would not start to "fly" as you experience in some games (I find that annoying typically).
- Ducking character = decrease the length of the spring and/or the capsule.
- Sliding downhill? You can fully control it by checking the angles of the floor area the ray cast of the spring hit.
I had to play around a lot with the stiffness of the spring, the length of the spring, the length of the grip etc. but in the end I was very happy about how simple yet well this worked.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…