Help with terrain collision in a custom movement system?

My game uses a custom movement system. I’ve created one that works using BodyVelocity, but the map has a lot of variety (tunnels, objects etc) and putting a part with collision on a player will cause them to spin out of control or tilt strangely when they collide with something. Right now I have the character raycast for an obstruction every frame and BodyVelocity won’t move them forward if they’re obstructed, but heartbeat isn’t perfect and fast characters can launch through things before they’re detected (especially if their fps is poor).

I’ve considered remaking the movement system to use player:move() instead, but that has a lot of issues with my custom character models. I also plan on adding flying and swimming using custom water which wouldn’t use player:move() anyway.

Does anyone know how I can make effective, low-cost terrain collision for a custom movement system?

Custom movement systems and character controllers are pretty difficult especially if you look at other engines like source engine.

Try looking at luanoids which uses vector forces to control their character. There’s a different simulation movement for each state, really interesting stuff.