Strange "Object reference not set to an instance of an object" case

Hello,

Basicly I have 3 scripts, first is attached to a gameobject on the scene and it’s duty is to handle how many creeps are left on the map to kill and count waves. Two other are basicly controllers for my prefab enemies.
I wanna decrement EnemiesLeft in both scripts attached to my prefabs after killing them.

public class WaveHandler : MonoBehaviour {
    private int Wave = 1;
    public int EnemiesLeft;
    public GameObject LittleGnome, Gnome, mapBorderLeft;
    public Text WavesLeft, enemiesLeft;
    // Use this for initialization
    void Start ()
    {
        Instantiate(LittleGnome, mapBorderLeft.transform.position, Quaternion.identity);
        Instantiate(Gnome, mapBorderLeft.transform.position, Quaternion.identity);
        EnemiesLeft = 5;
}
   
    // Update is called once per frame
    void Update ()
    {
        WavesLeft.text = "Wave:" + Wave + "/8";
        enemiesLeft.text = "Enemies left:" + EnemiesLeft;
    }

}
public class Enemy03Controller : MonoBehaviour {

    private KnightController knight;
    private WaveHandler WH;
    private float speed = 3f;
    private Rigidbody2D Rb2D;
    private ExplosionHandler explosion;
    Vector3 localScale;
    private bool moveRight = true;
    // Use this for initialization
    void Start ()
    {
        knight = GameObject.Find("CharacterV2").GetComponent<KnightController>();
        Rb2D = GetComponent<Rigidbody2D>();
        localScale = transform.localScale;
        explosion = GameObject.Find("prezent").GetComponent<ExplosionHandler>();
        Physics2D.IgnoreLayerCollision(15, 12);
        WH = GameObject.FindGameObjectWithTag("GameController").GetComponent<WaveHandler>();
    }
   
    // Update is called once per frame
    void Update ()
    {
        if (explosion.destroy == true)
        {
            WH.EnemiesLeft--;
            Destroy(GetComponent<Rigidbody2D>());
            Destroy(GetComponent<Collider2D>());
            Destroy(gameObject);
        }
    }
    void FixedUpdate()
    {
        if (knight.transform.position.x > Rb2D.transform.position.x)
        {
            moveRight = true;

        }
        if (knight.transform.position.x < Rb2D.transform.position.x)
        {
            moveRight = false;
        }
       
        if (moveRight)
        {
            MoveRight();
        }
        if (!moveRight)
        {
            MoveLeft();
        }
       
    }
    void MoveRight()
    {
        moveRight = true;
        localScale.x = 1;
        transform.localScale = localScale;
        Rb2D.velocity = new Vector2(localScale.x * speed, Rb2D.velocity.y);

    }
    void MoveLeft()
    {
        moveRight = false;
        localScale.x = -1;
        transform.localScale = localScale;
        Rb2D.velocity = new Vector2(localScale.x * speed, Rb2D.velocity.y);
    }
}

It works on this script without any problems. When I wanted to do the same thing in other script it returns me with
NullReferenceException: Object reference not set to an instance of an object
EnemyControl.Update () (at Assets/EnemyControl.cs:46)

public class EnemyControl : MonoBehaviour
{
    public bool Push = false;
    public Slider hpBar;
    public GameObject Axe, Spear, WavesHandler;
    private KnightController knight;
    Animator EnemyAnim;
    private float speed = 2.5f;
    private Rigidbody2D rb2D, rb2D2;
    private bool moveright = true;
    Vector3 localScale;
    Transform leftWaypoint, rightWayPoint;
    public GameObject blood;
    private int deathAnimationSelection;
    private bool choiceAvailable = true;
    private Collider2D spearCollider2D, GnomeCollider2D;
    private bool inFight = false;
    public bool PushedAway = false;
    private bool pushedOnce = false;
    private WaveHandler WH;
    // Use this for initialization
    void Start()
    {
        Physics2D.IgnoreLayerCollision(12, 13);
        knight = GameObject.Find("CharacterV2").GetComponent<KnightController>();
        EnemyAnim = GetComponent<Animator>();
        localScale = transform.localScale;
        rb2D = GetComponent<Rigidbody2D>();
        leftWaypoint = GameObject.Find("leftWaypoint").GetComponent<Transform>();
        rightWayPoint = GameObject.Find("rightWaypoint").GetComponent<Transform>();
        spearCollider2D = Spear.GetComponent<Collider2D>();
        spearCollider2D.enabled = false;
        rb2D2 = Spear.GetComponent<Rigidbody2D>();
        GnomeCollider2D = GetComponent<Collider2D>();
        GameObject myObject = GameObject.Find("WavesHandler");
        WH = GameObject.FindGameObjectWithTag("GameController").GetComponent<WaveHandler>();
    }

    // Update is called once per frame
    void Update()
    {
        if (hpBar.value < 1 && choiceAvailable == true)
            {
            WH.EnemiesLeft--;
            Destroy(GetComponent<Rigidbody2D>());
            Destroy(GetComponent<Collider2D>());
                deathAnimationSelection = Random.Range(0, 2);
                switch (deathAnimationSelection)
                {
                    case 0:
                        EnemyAnim.Play("Death");
                        Destroy(gameObject, 2f);
                        break;
                    case 1:
                        EnemyAnim.Play("Death2");
                        Destroy(gameObject, 2f);
                        break;
                    default:
                        break;
                }
            choiceAvailable = false;
        }
       
    }
    void FixedUpdate()
    {
        if (transform.position.x > rightWayPoint.position.x)
        {
            moveright = false;
        }
        if (transform.position.x < leftWaypoint.position.x)
        {
            moveright = true;
        }
        if (PushedAway == false)
        {
            if (moveright && inFight == false)
            {
                MoveRight();
            }
            if (!moveright && inFight == false)
            {
                MoveLeft();
            }
        }
    }
    void OnCollisionEnter2D(Collision2D col)
        {

            if (col.gameObject.CompareTag("Player"))
            {
                inFight = true;
                if (knight.facingRight)
                {
                    MoveLeft();
                }
                if (!knight.facingRight)
                {
                    MoveRight();
                }
                //rb2D.velocity = new Vector2(0, rb2D.velocity.y);
                EnemyAnim.SetBool("PlayerCollider", true);
                //Destroy(gameObject);

            }
            if (col.gameObject.CompareTag("Axe"))
            {
                inFight = true;
                if (knight.facingRight)
                {
                    MoveLeft();
                }
                if (!knight.facingRight)
                {
                    MoveRight();
                }
                EnemyAnim.SetBool("PlayerCollider", true);
                rb2D.velocity = new Vector2(0, rb2D.velocity.y);
                Instantiate(blood, rb2D.transform.position, Quaternion.identity);
                hpBar.value -= 40;
            }
        }
        void OnCollisionStay2D(Collision2D col)
        {
            // do poprawy, przy przepychaniu zaczyna bić
            if (col.gameObject.CompareTag("Player") || col.gameObject.CompareTag("Axe"))
            {
                inFight = true;
                //rb2D.velocity = new Vector2(0f, rb2D.velocity.y);
                EnemyAnim.SetBool("PlayerCollider", true);
            }
        }
        void OnCollisionExit2D(Collision2D col)
        {
            inFight = false;
            EnemyAnim.SetBool("PlayerCollider", false);
        }
        void MoveRight()
        {
            moveright = true;
            localScale.x = 1;
            transform.localScale = localScale;
            rb2D.velocity = new Vector2(localScale.x * speed, rb2D.velocity.y);

        }
        void MoveLeft()
        {
            moveright = false;
            localScale.x = -1;
            transform.localScale = localScale;
            rb2D.velocity = new Vector2(localScale.x * speed, rb2D.velocity.y);
        }
        void spearColliderActivation()
        {
            spearCollider2D.enabled = true;
        }
        void spearColliderDeactivation()
        {
            spearCollider2D.enabled = false;
        }
    void OnTriggerEnter2D(Collider2D col)
    {
        //rb2D.velocity = new Vector2(0, rb2D.velocity.y);
    }
    private void OnTriggerStay2D(Collider2D col)
    {
       
        Vector2 force = new Vector2(8f, 0f);
        if (pushedOnce == false && knight.pushButtonActivated == true)
        {
            if (col.gameObject.tag.Equals("Player") && knight.facingRight)
            {
                rb2D.AddForce(force, ForceMode2D.Impulse);
                knight.pushButtonActivated = false;
               
            }
            if (col.gameObject.tag.Equals("Player") && !knight.facingRight)
            {
                rb2D.AddForce(-force, ForceMode2D.Impulse);
                knight.pushButtonActivated = false;
            }
           
            StartCoroutine(delayBeforeMoving(0.8f));
        }

    }
    void OnTriggerExit2D(Collider2D col)
    {
       
    }
    IEnumerator delayBeforeMoving(float delayTime)
    {
        pushedOnce = true;
        PushedAway = true;
        yield return new WaitForSeconds(delayTime);
        PushedAway = false;
        pushedOnce = false;
    }
}

Any advices?

  • NullReferenceException: Object reference not set to an instance of an object
    EnemyControl.Update () (at Assets/EnemyControl.cs:44)