Fall Damage script not working

I’m new to unity and c#. I wrote a fall damage script and everything seems to work fine. It captures the starting y position and ending y position but then it doesn’t take away health. As soon as I hit the ground I get the error

“NullReferenceException: Object reference not set to an instance of an object
FallDamage.Update () (at Assets/Scripts/FallDamage.cs:60)”

Also in that line I want to do TakeDamage(startYPos - endYPos - damageThreshold); but it says “can’t convert from float to int.”

Here is my fall damage script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class FallDamage : MonoBehaviour {

    public Transform healthBar;
    public float startYPos;
    public float endYPos;
    public float damageThreshold;
    public bool damageMe = false;
    public bool firstCall = true;
    public bool isGrounded = true;

	// Use this for initialization

    

    void OnCollisionEnter(Collision collision)
    {
        isGrounded = true;
    }

    void OnCollisionStay(Collision collision)
    {
        isGrounded = true   ;
    }

    void OnCollisionExit(Collision collision)
    {
        isGrounded = false;
    }


    // Update is called once per frame
    void Update () {
        damageThreshold = 1;
		if(GetComponent<Rigidbody>() && isGrounded == false)
        {
            if(gameObject.transform.position.y > startYPos)
            {
                firstCall = true;
            }

            if(firstCall == true)
            {
                startYPos = gameObject.transform.position.y;
                firstCall = false;
                damageMe = true;
            }
        }
        if(GameObject.FindObjectOfType<Rigidbody>() && isGrounded == true)
        {
            endYPos = gameObject.transform.position.y;
            if(startYPos - endYPos > damageThreshold)
            {
                if (damageMe == true)
                {
                    healthBar.GetComponent<Health>().TakeDamage(startYPos - endYPos - damageThreshold);
                    damageMe = false;
                    firstCall = true;
                }
            }
        }
	}
}

And here is my Health script:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Health : MonoBehaviour
{
    public const int maxHealth = 100;
    public int currentHealth = maxHealth;
    public Image healthBar;

    float CalculateHealth()
    {
        return (float)currentHealth / maxHealth;
    }

    public void TakeDamage(int amount)
    {
        currentHealth -= amount;
        healthBar.fillAmount = CalculateHealth();
        if (currentHealth <= 0)
        {
            Destroy(gameObject);
            currentHealth = 0;
            Debug.Log("Dead!");
        }

    }

}

Cast from float to int: TakeDamage((int)(startYPos - endYPos - damageThreshold)).

This GameObject.FindObjectOfType<Rigidbody>() should be GetComponent<Rigidbody>().

Better yet, cache your Rigidbody to improve performance and not call GetComponent in Update:

private Rigidbody _rigidbody;
void Awake() { _rigidbody = GetComponent<Rigidbody>(); }
// Now use _rigidbody in your code instead of GetComponent.

Ensure that “healthBar” really does have a Health component attached to it.