У меня есть скрипт загрузчика, который загружает сцену аддитивно.Проблема, с которой я столкнулся, заключается в том, что когда загружается новая сцена, она проверяет, является ли она основной активной сценой на 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);
}
}
}