Установить активную сцену перед вызовом пробуждения на сцене, загружаемой аддитивно - PullRequest
0 голосов
/ 17 июня 2019

У меня есть скрипт загрузчика, который загружает сцену аддитивно.Проблема, с которой я столкнулся, заключается в том, что когда загружается новая сцена, она проверяет, является ли она основной активной сценой на Awake, если нет, то загружает сцену с помощью этого сценария, и эта сцена перезагружает ту спроверка Awake создает, таким образом, бесконечный цикл загрузки сцены.

В этом сценарии, когда я пытаюсь установить основную сцену, он говорит, что загрузка еще не завершена.Если я закомментирую оператор if, я получу цикл загрузки сцены, как упомянуто выше.

Итак, как / что я могу сделать, чтобы установить активную сцену перед вызовом Awake для сцены загрузкикомпоненты gameobject?

Примечание: LoadScene() запускается из UnityEvent

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Events;
using System.Collections;

public class GSLoadComplete : MonoBehaviour {

  public LoadSceneMode mode;

  [Tooltip("Set the scene as the main scene (Only when mode is set to Addictive)")]
  public bool addictiveSetAsMain;

  public UnityEvent onAddictiveLoadCompleted;

  public void LoadScene(string sceneName) {
    if (mode == LoadSceneMode.Additive) {
      StartCoroutine(LoadSceneAddictive(sceneName));
    } else {
      SceneManager.LoadScene(sceneName, mode);
    }
  }

  IEnumerator LoadSceneAddictive(string sceneName) {

    AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName, mode);
    asyncLoad.allowSceneActivation = false;

    // Wait until the asynchronous scene fully loads
    while (!asyncLoad.isDone) {
      if (asyncLoad.progress >= 0.9f) {
        // Commenting this out creates an infinite load loop
        if (addictiveSetAsMain) {
          SceneManager.SetActiveScene(SceneManager.GetSceneByName(sceneName));
        }
        asyncLoad.allowSceneActivation = true;
      }
      yield return null;
    }

    onAddictiveLoadCompleted.Invoke();
  }

}

Это скрипт, который загружается на Awake:

using UnityEngine;
using UnityEngine.SceneManagement;

public class LoadMain : MonoBehaviour {

  public string scene;

  void Awake() {
    if (SceneManager.GetActiveScene().name != scene) {
      SceneManager.LoadScene(scene, LoadSceneMode.Single);
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...