Problem with jump script

I have a ball rolling across the screen and I want it to jump everytime the “Fire1” button is clicked. This only occurs once or twice per number of clicks, where I need it to work everytime.

As far as I can see, there’s nothing wrong, but it’s late so I might be overlooking something so any help would be appreciated.

Here is my code:

public class platform : MonoBehaviour 
{
	public Rigidbody target;
	public int force = 250;
	public float speed = 0.1f;
	public int jumpHeight = 6;
	public bool isFalling = false;

	// Use this for initialization
	void Start () 
	{
	
	}
	
	// Update is called once per frame
	void Update () 
	{

		if(Input.GetKeyDown(KeyCode.R))
		{
			Application.LoadLevel(0);
		}
	}
	
	// Update is called once per frame
	void FixedUpdate () 
	{
		ballMovements ();	
	}

	void ballMovements()
	{
		rigidbody.AddRelativeTorque(Vector3.right * -1 * speed);
		
		if(Input.GetButtonDown("Fire1") && isFalling == false)
		{
			Debug.Log ("clicked");
			Vector3 temp = rigidbody.velocity;
			temp.y = jumpHeight;
			rigidbody.velocity = temp;
		}
		isFalling = true;
	}
	
	void OnCollisionStay()
	{
		isFalling = false;
	}
}

You should not be taking user input during FixedUpdate().
Take inputs in Update().

Input.GetButtonDown() only returns true during the frame the button was pressed, so if FixedUpdate() occurred on any frames other than when the button was pressed, it will be false. Which is why your jump “sometimes” works.
Update() occurs every frame so that’s why you should take inputs in Update().

Here’s a solid explanation: c# - What's the difference between Update and FixedUpdate in Unity, and should I bother? - Game Development Stack Exchange

And here’s the fixed code:

public class platform : MonoBehaviour 
{
    public Rigidbody target;
    public int force = 250;
    public float speed = 0.1f;
    public int jumpHeight = 6;
    public bool isFalling = false;
    private bool isJumping = false;

 
    // Use this for initialization
    void Start () 
    {
 
    }
 
    // Update is called once per frame
    void Update () 
    {
 
        if(Input.GetKeyDown(KeyCode.R))
        {
            Application.LoadLevel(0);
        }

        if(Input.GetButtonDown("Fire1") && isFalling == false)
            isJumping = true;

    }
 
    // Update is called once per frame
    void FixedUpdate () 
    {
        ballMovements ();   
    }
 
    void ballMovements()
    {
        rigidbody.AddRelativeTorque(Vector3.right * -1 * speed);
 
        if( isJumping )
        {
            isJumping = false;
            Debug.Log ("clicked");
            Vector3 temp = rigidbody.velocity;
            temp.y = jumpHeight;
            rigidbody.velocity = temp;
        }
        isFalling = true;
    }
 
    void OnCollisionStay()
    {
        isFalling = false;
    }
}