I’m trying to get custom movement working by using CapsuleCast (SphereCast has the same issues and is simpler so I’m using that in my example project) instead of CharacterController.Move. The problem is that the distance returned by Sphere/CapsuleCast of how far you can move in the specified direction before colliding often leaves you inside the object you hit, which then lets you move freely through it. What’s worse, the percentage of the distance they return that you actually can move seems to be random. Sometimes you can move 10% of the distance before CheckCapsule/Sphere will return true, sometimes 90%, sometimes it’s telling the truth.
1123701–42425–$test.zip (107 KB)
In my example project, ticking “Use Buggy Collisions” in the Character Motor uses manual collision handling with a free-floating object. It properly collides against the plane and the TOP of the dummy capsule, but if you push up against the bottom of the capsule, it eventually lets you go through. Holding Left Shift lets you move faster, but speed doesn’t seem to introduce any problems.
A side problem is that even CharacterController.Move (Un-ticking “Use Buggy Collisions”) seems to clip through under certain conditions, which gives no useful way to reliably do collisions. It collides against the bottom of the dummy capsule ok, but if you hold Left Shift to move faster and fly at the example plane, you will eventually clip through.
Am I doing something wrong, or is the collision detection just broken?