Search Unity

MissingReferenceException

Discussion in 'Scripting' started by Digital_Owl, Dec 5, 2021.

  1. Digital_Owl

    Digital_Owl

    Joined:
    Feb 7, 2021
    Posts:
    46
    whenever my player dies, loads game over UI and loads level again its perfectly fine but going through same steps on a second time its giving me error like:

    MissingReferenceException: The object of type 'DontDestroyOnLoad' has been destroyed but you are still trying to access it.

    Your script should either check if it is null or you should not destroy the object.

    DontDestroyOnLoad.OnSceneLoaded (UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode) (at Assets/Scripts/DontDestroyOnLoad.cs:19)



    any idea why?



    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    using UnityEngine.UI;

    using UnityEngine.SceneManagement;



    public class DontDestroyOnLoad : MonoBehaviour

    {

    void Awake()

    {

    DontDestroyOnLoad(gameObject);

    SceneManager.sceneLoaded += OnSceneLoaded;

    }



    void OnSceneLoaded(UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode)

    {

    if (scene.name == "LoseScene")

    {

    Destroy(gameObject);

    }

    }

    }
    Code (CSharp):
    1. using System.Collections;
    2.  
    3. using System.Collections.Generic;
    4.  
    5. using UnityEngine;
    6.  
    7. using UnityEngine.UI;
    8.  
    9. using UnityEngine.SceneManagement;
    10.  
    11.  
    12.  
    13. public class DontDestroyOnLoad : MonoBehaviour
    14.  
    15. {
    16.  
    17. void Awake()
    18.  
    19. {
    20.  
    21. DontDestroyOnLoad(gameObject);
    22.  
    23. SceneManager.sceneLoaded += OnSceneLoaded;
    24.  
    25. }
    26.  
    27.  
    28.  
    29. void OnSceneLoaded(UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode)
    30.  
    31. {
    32.  
    33. if (scene.name == "LoseScene")
    34.  
    35. {
    36.  
    37. Destroy(gameObject);
    38.  
    39. }
    40.  
    41. }
    42.  
    43. }
     
  2. GroZZleR

    GroZZleR

    Joined:
    Feb 1, 2015
    Posts:
    3,201
    Unsubscribe from the sceneLoaded event before you destroy the GameObject.
     
  3. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    38,689
    Probably what GroZZleR suggests above, but if it is not, this is THE MOST COMMON error ever, and there is only one way to deal with it.

    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://forum.unity.com/threads/why-do-my-music-ignore-the-sliders.993849/#post-6453695

    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://forum.unity.com/threads/nul...n-instance-of-an-object.1108865/#post-7137032