Whenever my player jumps there is only a ~50% chance it will actually jump, how can I fix this?

I’m not using a character controller just a rigidbody with a control script. The player is a ball and it seems the game has a hard time actually determining when the player is grounded. I’ve often had to spam space bar just to get it to actually register a jump. It is incredibly infuriating, here is the code I am using.

	void FixedUpdate ()
		float moveHorizontal = Input.GetAxis ("Horizontal");
		float moveVertical = Input.GetAxis ("Vertical");

		Vector3 movement = new Vector3 (moveVertical, 0.0f, moveHorizontal);

		rigidbody.AddForce (movement * speed * Time.deltaTime);

		if(Input.GetButtonDown("Jump") && isFalling == false)
			rigidbody.velocity += Vector3.up * jumpSpeed;
		isFalling = true;

	void OnCollisionStay()
		isFalling = false;

I’m really not sure what else I can do.

It’s because you’re trying to register player input in FixedUpdate(). FixedUpdate is not called every frame but is scheduled to run at fixed time steps. It should be for physics code only - put Input.GetButtonDown etc. in Update().