2016-06-11 13 views
3

also mache ich mein erstes fps-Spiel und jetzt bin ich an dem Punkt, vom Startmenü zu meiner ersten Szene zu gehen. Wenn diese neue Szene geladen wird, auf dem wachen, in meinem Pause-Spiel-Skript, setze ich pauseMenu.SetActive (false) (es ist ein Canvas und das Pause-Spiel-Skript ist nicht an es angehängt, sondern an ein Spiel-Manager-Objekt) und ich setze ein Bool, das sagt, ist zu falsch (vor der Wachfunktion).Unity 5 NullReferenceException nach Laden neuer Szene

Jetzt ist das Gefühl großartig, ich denke, ich habe es geschafft, nichts ist abgestürzt, es ist so einfach! Aber ... wenn ich auf Escape (um das Spiel anzuhalten) drücke, bekomme ich eine NullReferenceException, weil es das Pausenmenü nicht mehr finden kann! Bevor ich anfing, Szenen zu wechseln, funktionierte dieses Bit mehr als gut, also, meine Frage ist, gibt es etwas zu wissen, wenn man zwischen Szenen wechselt, die die Ausführung des Skripts unterbrechen? Mein Shooting funktioniert auch nicht, aber meine SwitchWeapon/Movement/MouseLook/ItemPickUp Skripte funktionieren. Gibt es ein schwarzes Loch beim Wechsel zwischen einer Startmenü-Szene und einer tatsächlichen Levelszene? HELP :)

Hier ist mein Code auf der 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; 
      } 
     } 
    } 
} 

Antwort

0

pauseMenu immer null, nachdem neue Szene aus irgendeinem Grund.

Sie haben zwei Möglichkeiten:

das Pause-Menü Canvas, um es im Editor Machen pauseMenu öffentlichen und ziehen dann pauseMenu = GameObject.Find("Canvas_Pause_Menu"); vom Awake Funktion entfernen. Sie müssen pauseMenu = GameObject.Find("Canvas_Pause_Menu"); entfernen.

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); 
    } 
} 

oder legen Sie den Code in Ihre Awake() Funktion in die Start() Funktion.

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); 
    } 
} 

Einer von diesen sollte Ihr Problem lösen. Der erste sollte, wenn der zweite fehlschlägt.

+0

@Manu Froh, dass es funktioniert hat. Glückliche Kodierung! – Programmer

+0

Beide Methoden haben nicht funktioniert, aber das liegt daran, dass ich mein Skript auf einem GameManager-Objekt hatte, das zwischen den Szenen bestehen bleibt. Also habe ich einfach das Skript auf mein Character-Objekt verschoben und habe deine erste opption 'public GameObject pauseMenu;' und das funktioniert :) auch alles, was ich vor meinem Start oder Erwachen deklariert habe funktioniert wie bei meiner Munition, ich habe sie in diese Funktionen verschoben und es funktioniert auch :) Ich verstehe irgendwie, wie es jetzt funktioniert, nochmals vielen Dank! – Manu

+0

@Manu Schön. Du lebst und lernst. Wenn Sie beim Erstellen eines Spielmenüs Probleme haben, pausieren und weitermachen, sehen Sie sich hier an, wie das geht. http://stackoverflow.com/a/37263453/3785314 – Programmer