A FLAWLESS way to check if character is grounded?

It’s my first time working with 3D in unity… Basically what I would usually do in unity 2D to check if the player is grounded or not is to simply add 2 raycasts downwards, one on each side of the player sprite, and || them… However I am now trying to make a 3D android game where checking if the character is grounded ACCURATELY AND FLAWLESSLY is crucial. Problem is,

  1. if I add like 2000 raycasts the phone will probably melt before the first frame gets rendered. Every other way I found on the Internet has its own flaws, such as:
  2. the OnCollisionEnter/Exit, since it will report that the character is grounded if he hits a wall in mid-air.
  3. the simple single raycast down will report that he is not grounded if he is on a ledge or on a hole smaller than his own radius
  4. rigidbody.velocity.y, might sometimes report that he is grounded if he is in mid-air, and adding a delay to check if he is falling back down or not in the next frame is not ideal.

I and no, tagging every piece of terrain for OnCollisionEnter is not an option, I need the player to be able to jump on anything, even walls (as long as he is on TOP of them, not hugging them while freefalling…)
I am also using a rigidbody with a capsule collider, as using a CharacterController is not an option. Plus, these things are just awful.

I tried this (C# Master Race):

public float checkCapsuleDistance = 0.1f;
    public float checkCapsuleRadius = 0.5f; //Same as my player's capsule collider's radius

    private Rigidbody body;
    private Collider capsuleCollider;

    void Start()
    {
        body = GetComponent<Rigidbody>();
        capsuleCollider = GetComponent<Collider>();
    }

    bool getGrounded()
    {
        return Physics.CheckCapsule(capsuleCollider.bounds.center, new Vector3(capsuleCollider.bounds.center.x, capsuleCollider.bounds.min.y - checkCapsuleDistance, capsuleCollider.bounds.center.z), checkCapsuleRadius);
    }

problem now being that it always reports that the player is grounded… And I have no idea how to fix it.
Ideally I would want the code above to behave properly, or if there’s an even better alternative I might use that too…

if you add a character controller component to the player you can use characterController.isGrounded to check if the play is currently standing on a Collider