2017-12-23 9 views
1

Ich versuche, ein 2D RPG-Spiel zu machen, das viele Objekte hat, die ich don'tdestroyonload Skript verwende. Aber dann möchte ich es zerstören, wenn ich zum Hauptmenü zurückkehre.Zerstöre nicht unter Last

ich diesen Skript So versucht habe

SceneManager.activeSceneChanged += DestroyOnMenuScreen; 

void DestroyOnMenuScreen(Scene oldScene, Scene newScene) 
{ 
    if (newScene.buildIndex == menuScreenBuildIndex) 
    { 
     Destroy(gameObject); 
    } 
} 

das bedeutet, die nicht zerstören auf Last-Objekt zerstört wird, wenn ich zum Hauptmenü bewegen, aber das Problem ist, wenn ich wieder spielen will, wird es Zeige mir, dass es das Objekt nicht finden kann, was bedeutet, dass es vollständig zerstört wurde.

Gibt es eine Möglichkeit, sicherzustellen, dass das Objekt wie zuvor zurückkehrt, wenn ich das Spiel erneut lade? Ich habe versucht, gameObject.setActive(false); zu verwenden, aber als ich starb und das Spiel wieder lade, bleibt es noch im gameover Zustand.

Antwort

3

Angenommen, Sie Szenen haben wie:

  • Menü => Enthält Objekt Menü
  • Scene1 => Enthält Manager-Objekt
  • Scene2
  • Scene3

Sie wollen die DontDestroyOnLoad um mit Scene1 und Scene2/3 zu arbeiten, aber im Menü entfernt. Navigation ist so, dass Sie immer von Menü zu Szene1 wechseln.

Haben Sie Ihr DontDestroyOnLoad-Objekt in Scene1.

Dann im Menü hat Prozess zerstören:

public class Menu:MonoBehaviour 
{ 
    void Start() 
    { 
     Destroy(FindObjectOfType<Manager>()); 
    } 
} 

public class Manager : MonoBehaviour 
{ 
     static Manager instance = null; 
     void Awake() 
     { 
      if(instance == null) 
      { 
       instance = this; 
       DontDestroyOnLoad(this.gameObject); 
       return; 
      } 
      if(instance == this){ return; } 
      Destroy(this.gameObject); 
     } 
} 

Ihr Manager ein Singleton-Stil-Muster muss. Wenn Sie zu Szene 1 zurückkehren, wird eine neue Instanz des Objekts hinzugefügt, und Sie müssen sicherstellen, dass das Original erhalten bleibt, aber das neue Objekt entfernt wird.

Die Hauptklasse prüft, ob ein Manager gefunden werden. Beim ersten Lauf passiert nichts, aber während des Spiels wird der Manager gefunden und entfernt, wenn Sie zu Menu zurückkehren. Wenn Sie das nächste Mal zu Szene1 zurückkehren, wird ein neuer Manager erstellt, da er Teil der Szene ist.

+0

Danke für die Hilfe: 3 – HerryChoding

+0

Sorry für die späte Lese, da ich für eine Weile von Touch-out – HerryChoding