Unity start () вызывается до полной загрузки сцены - PullRequest
0 голосов
/ 30 января 2020

Я столкнулся с этой статьей Редактирование нескольких сцен , и в нижней части раздела советов и подсказок есть следующее предложение: «Рекомендуется избегать использования 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?

...