Drucken
PDF

Hierarchy in jeder Szene beibehalten

Geschrieben von: Dan Miller-Schroeder, übersetzt von Lars Klein am .

Dan Miller-Schroeder- design3
Dan Miller-SchroederDan hat, lange bevor er mit Game Development in Kontakt kam, Musik und Film studiert. Er ist begeistert, wie sehr beide Dinge sich mit interaktiven Systemen kombinieren lassen. Bevor er bei design3 angefangen hat zu arbeiten, hat er an Blu-Ray sowie interaktiven DVD Projekten gearbeitet. Wenn Dan dann gerade mal nicht über nicht-lineare Umgebungen nachdenkt, spielt er Schlagzeug und schreibt Musik für die Bands Sleeptalks und Vandella aus San Francisco. Seine Lieblingsspiele: Guild Wars, Diablo II, Star Wars: KOTOR, Borderlands & Call of Duty.
Irgendjemand hat vor kurzem in den Unity Foren nachgefragt, wie man die Hierarchy von einer Szene in die andere Szene bekommt. Ich zeige euch eine einfache Lösung mit einem Beispielprojekt, dass es euch in Action zeigt.
  1. Alle Objekte mit einem Tag belegen.
  2. Alle Objekte in einen Array einfügen.
  3. Iterate durch das Array, aber nicht DontDestroyOnLoad benutzen.
  4. Laded die neue Szene; alle Objekte wurden beibehalten.
Diese Methode benutzt GameObject.FindGameObjectsWithTag() und benötigt einfach nur, dass alle Game Objekte den selben Tag haben. Vielleicht möchtest du nicht in jeder Situation sämtliche Objekte haben, deswegen kannst du auch Object.FindObjectsOfType nutzen. Bei mehreren Tags und Arrays kannst du auch GameObject.FindGameObjectsWithTag() benutzen. Du musst dir aber sicher sein, dass du DontDestroyOnLoad an allen beibehaltenen Objekten aufrufen kannst.

Fügt dieses Skript zum Manage- oder Kontroll-Game Objekt und ruft diese Funktion vor jedem Szenen-Ladevorgang auf.

private var allObjects : Object[];

function PreserveObjects () {
    allObjects = GameObject.FindGameObjectsWithTag("Preserve") as Object[];
    for (allObject in allObjects) {
     DontDestroyOnLoad(allObject);
    }
}

Um das Beispiel-Projekt zu nutzen:
  1. Öffene Scene1 und simuliere sie. In der Hierarchy befinden sich ein Würfel sowie eine Kugel. Drücke [L] um Scene2 zu laden. Sie hat einen Zylinder, aber der Würfel und die Kugel aus Szene 1 wurden gelöscht.
  2. Öffne nun erneut Scene1 und simuliere diese. Nun aber drückst du [P], womit alle Objekte mit dem Preserve-Tag gefunden werden und mit DontDestroyOnLoad belegt werden. Wenn du nun [L] für Szene 2 drückst, wird jene Szene mit Zylinder, Würfel und Kugel geladen.
Weiterführende Links:
[http://fileserver.unity-insider.de/PreserveHierarchy.zip]
Download des Beispiel-Projekt