- Home /
Cleaning up before LoadScene
I've been having a problem, like many people here, with a "MissingReferenceException" when using the SceneManager to do a LoadScene. I don't have any scripts using DontDestroyOnLoad, I just want to wipe everything clean and load my menu scene back. I've tripled-checked my event subscriptions pairs (in OnEnable and OnDisable) and they all look fine. The error is caused by different scripts it seems, with one being particularly touchy, a script which uses OnBecameInvisible (code below). Could it be that Unity calls "OnBecameInvisible" when doing a LoadScene? Thanks for your help.
public class DestroyWhenOutsideViewport : MonoBehaviour {
private Camera cam;
private void Awake()
{
cam = Camera.main;
}
public void OnBecameInvisible()
{
Vector3 pos = cam.WorldToViewportPoint(transform.position);
if (pos.x > 1.0 || pos.x < 0 || pos.y > 1.0 || pos.y < 0)
{
Destroy(gameObject);
}
}
}
According to the Execution Order, Awake should definitely be called before OnBecameInvisible. Have you tried tossing in a few Debug.Log() statements to get a better look at how everything is behaving? Also, which references is missing? Is it blowing up when you try to call cam.WorldToViewportPoint()?
Well, nothing really blows up, even in a development build I only get a $$anonymous$$issingReferenceException when going back to the menu and then everything behaves normally again. Because I was getting the error mostly from OnBecameInvisible in a script which extends my base "Entity" class, I thought I'd add the following to the base "Entity" class, which only made matters worse because now I get $$anonymous$$issingReferenceException in both places, the derived class and the base class. I don't know where I can put debug checks because Unity apparently gets rid of objects at random when unloading a scene, but there's probably something very basic here that I've missed.
public virtual void Awake()
{
Scene$$anonymous$$anager.sceneUnloaded += OnSceneUnloaded;
}
private void OnSceneUnloaded(Scene arg0)
{
if (gameObject != null)
Destroy(gameObject);
}
Your answer
Follow this Question
Related Questions
UnloadSceneAsync() does not seem to work with additive scenes. 1 Answer
Game isn't working the same way before main menu? 0 Answers
My game breaks when I load it from another scene (menu scene). 0 Answers
Can I use one script to toggle between scenes? 1 Answer
Scene takes long to load only first time 2 Answers