So I'm making a game with my own simplified physics because I need full control and knowledge of what's happening in each frame, but the one thing I still need to "ask" Unity to do for me is applying the actual movement which I calculated, in each fixed frame. I use the CharacterController component, only because it has the CharacterController.Move() function which I can move something with, slide it along walls if a collision happens, and also get the collision's normal. The problem's that I don't like this component. It has "weird" slope offset and step limit variables which are trash to me since I'm the one that'll be doing such checks IF I want to. Basically, I need a function similar to CharacterController.Move(), which only asks for a radius of a hypothetic sphere collider it will use to calculate the final position, having considered the slide it would do if it hit a surface during the movement. And which returns the collision normal (for now let's ignore multiple collisions).
you should move your GameObject with transform.Translate and trace rays and check for collisions your self before moving the GameObject. you can check for sphere collisions and lineCast and raycast with methods of Physics class. also you can use triggers for collision detection. add a collider to your object and check it's "is trigger" box. then you can use OnTriggerEnter, OnTriggerExit and OnTriggerStay functions to get information about collisions without raycasting.
Wouldn't it be easier to use the CharacterController and just set those variables to values that make them irrelevant?
If you really want to do your own physics (reinventing the wheel) and just need information about collisions I'd try to either use a sphere collider/trigger around the character, that has the radius of your characters speed. Or just do some raycasts in the direction of speed and see if you are hitting something before moving. RaycastHit will also tell you about the exact point and the normal of the surface you hit.