Raycast: nullreferenceException error spammed, yet working...

Everything is working fine, so my code “should” be good, but it is bugging me that this error is, despite everything, spammed about 60 times/s. That could be a performance issue, also…

My code is supposed to detect interactable sprites when hovered by a raycast, then turn them into an other sprite to indicate to the player that he can “activate” it.

Here’s my code:

    void Update()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, interactDistance))
        {
            hit.collider.GetComponent<Interactable_hint>().Hovered(); // This line is the problematic one. Somehow, unity didn't understand that I stated "if" just before...

            if ((hit.collider.CompareTag("People")) && (!IsTalking2))
            {
                if (Input.GetKeyDown(KeyCode.Mouse0))
                {
                    if (IsTalking == false)
                    {
                        hit.collider.GetComponent<DialogTrigger>().TriggerDialog();
                        IsTalking = true;
                    }
                    else
                    {
                        FindObjectOfType<DialogManager>().DisplayNextSentence();
                    }
                }
            }

            if (hit.collider.CompareTag("Door"))
            {
                if (Input.GetKeyDown(KeyCode.Mouse0))
                {
                    hit.collider.transform.parent.GetComponent<DoorScript>().ChangeDoorState();
                }
            }
}

As you can see, this is a very simple code to interact with various object from a first-person camera. So why am I spammed with that error “Object reference not set to an instance of an object”? (For it is working as intended ><)

You don’t have a layer mask so the ray hits everything with a collider in range. Does every gameobject with a collider in your scene have a component called Interactable_hint attached to it? If not, it’ll be null and can therfore not call Hovered(), which will throw a null exception.

I solved it. Not the cleanest solution, I guess, but it works. I just moved the problematic line.

        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, interactDistance))
        {

            if ((hit.collider.CompareTag("People")) && (!IsTalking2))
            {
                hit.collider.GetComponent<Interactable_hint>().Hovered();
                if (Input.GetKeyDown(KeyCode.Mouse0))
                {
                    if (IsTalking == false)
                    {
                        hit.collider.GetComponent<DialogTrigger>().TriggerDialog();
                        IsTalking = true;
                    }
                    else
                    {
                        FindObjectOfType<DialogManager>().DisplayNextSentence();
                    }
                }
            }

            if (hit.collider.CompareTag("Door"))
            {
                hit.collider.GetComponent<Interactable_hint>().Hovered();
                if (Input.GetKeyDown(KeyCode.Mouse0))
                {
                    hit.collider.transform.parent.GetComponent<DoorScript>().ChangeDoorState();
                }
            }
}