Help - NullReferenceException: Object reference not set to an instance of an object

I tried so many things but i dont get it.
Probably gameObject souldnt be null but how to fix it?

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


public class Interactor : MonoBehaviour
{
    public LayerMask interactableLayermask = 16;
    //Start is called before the first frame update
   void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        RaycastHit hit;
        if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, 2, interactableLayermask))
        {
            if(Input.GetKeyDown(KeyCode.E))
            {
                    GetComponent<PageScript>().pages++;
                    Destroy(hit.collider.gameObject);
            }
        }
       
    }

}

Error:
NullReferenceException: Object reference not set to an instance of an object
Interactor.Update () (at Assets/My Game/C# Scipts/Interactor.cs:23)

The answer is always the same… ALWAYS. It is the single most common error ever.

Don’t waste your life spinning around and round on this error. Instead, learn how to fix it fast… it’s EASY!!

Some notes on how to fix a NullReferenceException error in Unity3D

  • also known as: Unassigned Reference Exception
  • also known as: Missing Reference Exception
  • also known as: Object reference not set to an instance of an object

http://plbm.com/?p=221

The basic steps outlined above are:

  • Identify what is null
  • Identify why it is null
  • Fix that.

Expect to see this error a LOT. It’s easily the most common thing to do when working. Learn how to fix it rapidly. It’s easy. See the above link for more tips.

You need to figure out HOW that variable is supposed to get its initial value. There are many ways in Unity. In order of likelihood, it might be ONE of the following:

  • drag it in using the inspector
  • code inside this script initializes it
  • some OTHER external code initializes it
  • ? something else?

This is the kind of mindset and thinking process you need to bring to this problem:

https://discussions.unity.com/t/814091/4

Step by step, break it down, find the problem.

Here is a clean analogy of the actual underlying problem of a null reference exception:

https://discussions.unity.com/t/840647/7

Remember, do NOT “probably.” This is engineering. The docs will also tell you that .gameObject is a shortcut to what this script is located on, and thus under normal Unity callback situations, it cannot be null. It might be under explicit external calling obviously.

Also, this is a hairy line of code:

How to break down hairy lines of code:

http://plbm.com/?p=248

Break it up, practice social distancing in your code, one thing per line please.

You are assuming that your gameobject has the PageScript component. If you casually reference a component like this, you should either mark your class with [RequireComponent(typeof(PageScript))], or do a null check and handle it if it is null. So basically,

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

[RequireComponent(typeof(PageScript))]
public class Interactor : MonoBehaviour
{
    public LayerMask interactableLayermask = 16;
    private PageScript pager;
    //Start is called before the first frame update
   void Start()
    {
          pager = GetComponent<PageScript>();
    }

    // Update is called once per frame
    void Update()
    {
        RaycastHit hit;
        if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, 2, interactableLayermask))
        {
            if(Input.GetKeyDown(KeyCode.E))
            {
                    pager.pages++;
                    Destroy(hit.collider.gameObject);
            }
        }
      
    }

}

or

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

public class Interactor : MonoBehaviour
{
    public LayerMask interactableLayermask = 16;
    private PageScript pager;
    //Start is called before the first frame update
   void Start()
    {
          pager = GetComponent<PageScript>();
    }

    // Update is called once per frame
    void Update()
    {
        RaycastHit hit;
        if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, 2, interactableLayermask))
        {
            if(Input.GetKeyDown(KeyCode.E))
            {
                    if(pager!=null)
                          pager.pages++;
                    else
                          Debug.LogWarning("PageScript not found".);
                    Destroy(hit.collider.gameObject);
            }
        }
      
    }

}

or something like that

Thank you guys! You helped me so much <3