Я столкнулся с этой статьей Редактирование нескольких сцен , и в нижней части раздела советов и подсказок есть следующее предложение: «Рекомендуется избегать использования DontDestroyOnLoad для сохранения менеджера GameObjects, который вы хотите чтобы выжить в разных сценах. Вместо этого создайте сцену менеджера ". Я решил попробовать это, так как в моей текущей игре есть менеджер, который использует DontDestroyOnload ().
Теперь скажите, что у меня есть 3 сцены: 1) StartScene 2) Менеджер 3) Level_01
In StartScene , я делаю так, чтобы менеджер постоянно загружался с самого начала:
void Start()
{
SceneManager.LoadSceneAsync("Manager", LoadSceneMode.Additive);
}
В Manager , у меня есть сценарий с именем SceneLoader
В SceneLoader я делаю это:
void Update()
{
Debug.Log(SceneManager.GetActiveScene().name);
}
public void LoadScene(string sceneName)
{
StartCoroutine(LoadSceneAsync(sceneName));
}
IEnumerator LoadSceneAsync(string sceneName)
{
Scene currentScene = SceneManager.GetActiveScene();
AsyncOperation sceneLoadingOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
while(!sceneLoadingOperation.isDone)
{
yield return null;
}
SceneManager.UnloadSceneAsync(currentScene);
SceneManager.SetActiveScene(SceneManager.GetSceneByName(sceneName));
}
У меня также есть кнопка Пуск. Когда я нажимаю кнопку, вызывается метод LoadScene ().
В Level_01 , я делаю это:
void Start()
{
Debug.Log("Level_01 start called");
}
Теперь вот проблема : Я ожидаю, что вывод консоли будет следующим:
StartScene (вывод SceneManager.CurrentlyActiveScene)
Level_01 start вызывается (вывод Start () в Level_01)
Level_01 (вывод SceneManager.CurrentlyActiveScene)
Вместо этого консольный вывод выглядит так:
StartScene (вывод SceneManager.CurrentlyActiveScene)
Level_01 start вызывается (вывод Start () в Level_01)
StartScene (вывод SceneManager.CurrentlyActiveScene)
Level_01 (вывод SceneManager.CurrentlyActiveScene)
Это означает, что функция Start () сцены Level_01 вызывается ДО ТОГО, как установлена CurrentActiveScene, и что CurrentActiveScene устанавливается только в следующем кадре.
Вопрос : Как я могу сделать уверен, что т Функция Start () вызывается только после установки CurrentActiveScene?