Since it is now possible to use fixed_update() and the motion of the physical body is now separated from the visual model, it is possible to significantly improve the smoothness of collision detection.
Previously this was not possible and a lot was built on some hacks. Now it is necessary to completely revise the algorithm.
In fixed_update() it is necessary to make movement and collect ALL collision messages. How to do it? For each collision message, collect all planes and normals of obstacles accumulatively, and each time calculate a new position based on all obstacle planes. And in the update already expose the model to the desired position.
Example implementation is described here in the Kinematic Character Controller section.