4

so I'm doing my first fps game and now I'm at the point of going from the start menu to my first scene. When that new scene loads, on the awake, in my pause game script, I set the pauseMenu.SetActive(false) (it's a Canvas and the pause game script is not attached to it but to a game manager object) and I set a bool that says isPaused to false (before the awake function).

Now the feeling is great, I'm thinking I've made it, nothing crashed, it is so easy! But... when I press on Escape (to pause the game), I get a NullReferenceException cause it can't find the pause menu anymore! Before I started working on switching scenes, that bit was working more than fine, SO, my question is, is there something to know when switching between scenes that breaks the scripts execution? My shooting doesn't work neither but my SwitchWeapon/Movement/MouseLook/ItemPickUp scripts work. Is there a black hole when switching between a Start Menu scene to an actual level scene? HELP :)

Here is my code on the PauseGame Script

GameObject pauseMenu;
 bool isPaused = false;

 void Awake()
 {
     if (Application.loadedLevelName != "Start_Menu")
     {
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible = false;
         pauseMenu = GameObject.Find("Canvas_Pause_Menu");
         pauseMenu.SetActive(false);
         Debug.Log(isPaused + " " + pauseMenu);
     }
 }

 void Update()
 {
     // Here I use Application.loadedLevelName because I haven't found
     // a SceneManager function in the Unity docs to check here)
     if (Application.loadedLevelName != "Start_Menu")
     {
         if (Input.GetKeyDown(KeyCode.Escape))
         {
             if (!isPaused)
             {
                 pauseMenu.SetActive(true);
                 Time.timeScale = 0f;
                 Cursor.visible = true;
                 isPaused = !isPaused;
             }
             else if (isPaused)
             {
                 pauseMenu.SetActive(false);
                 Time.timeScale = 1f;
                 Cursor.lockState = CursorLockMode.Locked;
                 Cursor.visible = false;
                 isPaused = !isPaused;
             }
         }
     }
 }
Programmer
  • 121,791
  • 22
  • 236
  • 328
Manu
  • 65
  • 1
  • 2
  • 8

1 Answers1

0

pauseMenu is becoming null after new scene for some reason.

You have two options:

Make pauseMenu public and drag the pause menu Canvas to it in the Editor then remove pauseMenu = GameObject.Find("Canvas_Pause_Menu"); from the Awake function. You must remove pauseMenu = GameObject.Find("Canvas_Pause_Menu");.

public GameObject pauseMenu;
bool isPaused = false;

 void Awake()
 {
     if (Application.loadedLevelName != "Start_Menu")
     {
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible = false;
         pauseMenu.SetActive(false);
         Debug.Log(isPaused + " " + pauseMenu);
     }
 }

OR put the code in your Awake() function into the Start() function.

GameObject pauseMenu;
bool isPaused = false;

 void Start()
 {
     if (Application.loadedLevelName != "Start_Menu")
     {
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible = false;
         pauseMenu = GameObject.Find("Canvas_Pause_Menu");
         pauseMenu.SetActive(false);
         Debug.Log(isPaused + " " + pauseMenu);
     }
 }

One of these should solve your problem. The first one should if the second one fails.

Programmer
  • 121,791
  • 22
  • 236
  • 328
  • Both of the methods did not work but that's because I had my script on a GameManager object that persists between scenes. So I just moved the script on my Character object instead and used your first otption `public GameObject pauseMenu;` and that works :) also, everything that I declared before my Start or Awake functions like for my ammo, I moved them inside those functions and it works as well :) I'm kinda understanding how it works now, thanks a lot again! – Manu Jun 11 '16 at 17:01
  • @Manu Nice. You live and learn. If you are having problems creating game menu,pause and resume stuff, take a look on how to do that here. http://stackoverflow.com/a/37263453/3785314 – Programmer Jun 11 '16 at 18:41
  • 1
    Sweet! Thank you :) – Manu Jun 11 '16 at 18:53