1. Персонаж прыгает по разному потому что у тебя проверка на GetButton, он срабатывает постоянно когда кнопка зажата, то есть прыжок кучу раз вызывается, используй GetButtonDown, тогда прыжок будет один при каждом нажатии на кнопку.
2. Я в целом не рекомендую использовать addforce для прыжков, его трудно контролировать, лучше используй rb.velocity = new Vector2(rb.velocity.x, jumpForce), хотя если исправить все остальное то можешь оставить если так тебе удобно.
3. CheckGround чуть измени, сделай слой Ground, и назначь его объектам пола, и пусть землей будет считаться только объекты соответствующего слоя, так стены и прочее будут игнорироваться, то есть будет так выглядеть метод - Collider2D[] collider = Physics2D.OverlapCircleAll(transform.position, circle, layerMask) где layerMask это либо номер слоя просто цифрой написан, либо что лучше - public переменная типа LayerMask, где ты в инспекторе выберешь нужный слой.
4. Вызывай метод в FixedUpdate, но ты код не предоставил, возможно ты это уже делаешь)