First of all, this project is really cool, and I'll certainly donate if I decide to use it, and maybe I'll donate anyway even if I don't.
I've been working on a DBP competition submission for 6 weeks or so, and I've started to realize that my own basic physics simulation is not enough to handle increasingly more complex events, so I've been considering a 3rd party library.
One thing I've noticed in the demo is that the character teleports onto the top of a box if you try to walk over it, and the box is small enough. I can't tell if this is also the case with the terrain, as the terrain is very smooth, but if there is a sharp incline on the terrain, will the player also teleport up the terrain incline?
One way to solve this issue would be to find the position that the player would be in if he/she teleported on top of the box/terrain, and then apply the appropriate impulse to move the player toward that position, instead of just teleporting the player there and ignoring all physics laws.
I don't know how to find the correct impulse to apply. Do you have any tips for this, or another method to solve this problem?
Thanks in advance for any assistance.
Edit: I see now that 0.16 is slated to have a more robust character controller. That's good to know, although any broad strokes you can give me for how to solve this issue would be good, as this project has to be ready for DBP in June. Unless of course, CharacterController updates are planned to arrive soon.
Edit: Modify TerrainDemo.cs to use this formula:
"heights[i, j] = (float)(50 * (Math.Sin(x / 4) + Math.Sin(z / 4)));"
After doing so I realized that there are actually several problems with character movement on the terrain.
The player does seem to speed up when moving over a steep surface, as I suspected.
The player can get traction on very, very steep inclines. You can prevent yourself from falling down the side of a near vertical cliff, as long as you push against the cliff.
Character movement improvement.
Re: Character movement improvement.
That's the 'stepping' behavior; it's intended. It allows you to go up stairs and such so long as they aren't too tall.One thing I've noticed in the demo is that the character teleports onto the top of a box if you try to walk over it, and the box is small enough.
The SimpleCharacterController always floats a fixed distance above the ground. The teleportation is used to ensure that the distance is held rigid. So technically, yes, you will 'teleport' up and down as you move along a terrain, but this behavior will not let you climb things that you shouldn't be able to. If you tried to climb a steep wall, you'd either just bump into it and stop, or if it was shallow enough, you could move up it for a second (due to forward momentum), then slide back down since you have no traction.I can't tell if this is also the case with the terrain, as the terrain is very smooth, but if there is a sharp incline on the terrain, will the player also teleport up the terrain incline?
Applying impulses to create discontinuous behavior (i.e. the effect of teleporting) requires more work than it's worth, and has other side effects such as extreme velocities that could send stuff flying if it's in the wrong place at the wrong time. Using teleportation is usually advised against, but sometimes it's just a good simple approach.One way to solve this issue would be to find the position that the player would be in if he/she teleported on top of the box/terrain, and then apply the appropriate impulse to move the player toward that position, instead of just teleporting the player there and ignoring all physics laws.
It will be more than a couple of weeks, less than a few monthsUnless of course, CharacterController updates are planned to arrive soon.

I don't see this behavior in tests. The SimpleCharacterController in its default form should not be able to control itself on any surface where it does not have traction, so 'pushing against the cliff' should be impossible unless it's actually standing on something else. It has traction if the slope of the surface it's standing on is less than MaxSlope.After doing so I realized that there are actually several problems with character movement on the terrain.
The player does seem to speed up when moving over a steep surface, as I suspected.
The player can get traction on very, very steep inclines. You can prevent yourself from falling down the side of a near vertical cliff, as long as you push against the cliff.
You might be seeing a side effect of the SimpleCharacterController's simplicity. It uses a single ray coming out of the bottom of a capsule. It's possible to get yourself stuck on the edge of a cliff if your raycast is just hanging in the void, and the capsule body lands on the edge. Due to friction, it gets stuck. It's possible to set it up so that the body has zero friction in all interactions by using an event handler and modifying the pair's material properties, or giving it a Material that has zero-friction interaction properties with other objects (using the MaterialManager.MaterialInteractions dictionary). Simply adding a bit of air control to the character controller might avoid it sufficiently too.
Note that the non-simple CharacterController isn't fully operational at the moment. If you're using it, weird things will happen on Terrains, StaticMeshes, and InstancedMeshes since it isn't updated to work with them. It's going to be replaced entirely by the new character controller. The SimpleCharacterController works on all objects.