While experimenting more with the new Character Controller API, I noticed issues with having custom characters move up slopes. In my testing, I found that the physics for the BalanceRigidityEnabled property (and related properties) do not play nicely with the ControllerManager and slopes.
Here are some videos I recorded of weird, unexpected behavior:
In this clip, I have BalanceRigidityEnabled set to true. I mainly expected the custom character to be able to move up the less than 45 degrees slope, but every time they try, they get sent down while also trying to snap to the wedge’s normal surface.
In this clip, I disabled BalanceRigidityEnabled and it caused the custom character to fling.
Lastly, I turned back on BalanceRigidityEnabled and tried a more shallow slope. The custom character was able to make it up, but it violently twitches on its way up, which is concerning because it indicates that the physics are not stable.
Expected behavior
I expected the API to behavior similarly how humanoids move up and down slopes, without weird twitching and flinging behavior.
The inconsistency with the character controller physics on slopes is concerning (and makes the API unappealing to use), and I hope this issue gets addressed in the future. Although the ControllerManager isn’t meant to have one-to-one Humanoid parity, Humanoids do a significantly better job at addressing slopes compared to the current alternative.
Here’s a link to the place I used for these videos here. All of the code for the custom character can be found within a Scripts folder inside the character: Character Controller Slope Test Cases - Roblox
The place file is also here:
CharacterControllerTestCases.rbxl (70.1 KB)
I’ve experimented with various GroundController base speeds as well, which ended up resulting in similar behavior. When adjusting friction values, I discovered that using too low of a friction causes the custom character to slide off the slope, and using too high of friction resulted in more flinging and clipping behavior.