I had same issue: Rigidbody object falls through the Terrain. I checked ALL answers regarding this issue, but my issue was still not solved.
First, let me give you my Character setup, if you have similar setup, maybe this is the fix for you: Character Hierarchy is: PlayerParent (Empty Object)>PlayerChild (Mesh, Rigidbody, Collider) + Camera (Child of PlayerParent).
After some tests, I realized, my character do not have any problem when starting at Transform Position Y: 0 or 1. When character is on Terrain, naturally it has to start above SeaLevel, which is above Y: 50 (or another water level you designated).
Let’s assume PlayerParent starts at Y:65. If PlayerChild is at Y1, PlayerParent keeps it at Y:66.
When game starts, Parent Object stays at 65, but Child always moves/teleports to -65. If it has Rigidbody with Gravity turned-on, then object starts to fall down. At first I had thought, object was falling through the terrain, but then I realized this starts as Object spawns at -65 first, then falling…
Real Reason of the Problem:
This issue is due to Spawn order of Unity. Therefore I solved by creating additional spawning time for PlayerChild. Because, PlayerChild spawns at position of Parent when parent is at Y:0. Then Parent moves to Y: 65. So child’s position becomes -65 relative to parent.
Here is how I solved it:
I added NextFrame Event for creating PlayerChild, then I set PlayerChild to Y:1 in the code (I use Playmaker for scripting). So when objects are created, this iterates the position of Playerchild again, then when PlayerParent is at 65, PlayerChild has Y:1 (world position at Y: 66),
I hope this can be helpful for somebody who has similar issue.