The buggy jump might also be because you're handling physics stuff in the Update method. Rather just capture what you want to happen in Update then do the physics stuff in FixedUpdate