Ich habe ein GameManager
Skript, das Ladeszenen verwaltet, Charaktere in die Szene setzt, Karteninformationen aus Spielobjekten liest und so weiter. Das Skript GameManager
ist auf DontDestroyOnLoad
festgelegt.Erhalte Kinder der neuen Szene
Ich versuche herauszufinden, wie auf Objekte in meiner neuen Szene von GameManager
zugegriffen wird, nachdem eine neue Szene geladen wird. Ich verwende das Ereignis SceneManager.sceneLoaded
, um meinen "Szeneninitialisierungs" -Code auszuführen. Hier ist der Event-Handler:
void OnLevelFinishedLoading(Scene scene, LoadSceneMode mode)
{
// I want to access GameObjects within the newly loaded scene here
//
// SceneManager.GetActiveScene().GetRootGameObjects() returns
// System.ArgumentException: the scene is not loaded
// I want to do something like this
foreach (MapFeature mapFeature in rootObject.GetComponentsInChildren<MapFeature>())
{
// Do something
}
}
Ich möchte mich das Root-Ebene zu bekommen GameObject
der neuen Szene, und verwenden Sie dann GetComponentInChildren
auf diesem Stammobjekt, um dynamisch verschiedene Komponenten in der Szene zu greifen und sie in GameManager
. SceneManager.GetActiveScene().GetRootGameObjects()
gibt jedoch System.ArgumentException: the scene is not loaded
zurück
Wie bekomme ich Objekte aus meiner neu geladenen Szene innerhalb meiner GameManager
? Wenn es eine bessere Methode gibt, als das Root-Objekt der neuen Szene zu bekommen und damit seine Kinder zu bekommen, bin ich ganz Ohr.
Dank. Sieht so aus, als ob die Ereignisse in der falschen Reihenfolge ausgelöst werden, so dass 'sceneLoaded' vor den ersten Events der neuen Szene ausgelöst wird? –