Answer the question
In order to leave comments, you need to log in
How to perform asynchronous scene loading?
Hello. I'm trying to make asynchronous scene loading with a delay in switching to it. That is, the scene should load, but switch to it on command. So far there is this:
public class SceneLoaderService : MonoBehaviour
{
private AsyncOperation _asyncLoad;
public event Action<float> ChangeProgressEvent;
public event Action CompletedLoadSceneEvent;
// Выполняется из другого скрипта после того как будут выполнены другие асинхронные операции
// (Пока что данный метод нигде не вызывается !)
public void LoadNow()
{
_asyncLoad.allowSceneActivation = true;
}
// Вызывается на Awake в другом скрипте с еще несколькими асинхронными операциями
public void AsyncLoadScene(int index)
{
StartCoroutine(LoadSceneCoroutine(index));
}
public void LoadScene(int index)
{
SceneManager.LoadScene(index);
}
private IEnumerator LoadSceneCoroutine(int index)
{
_asyncLoad = SceneManager.LoadSceneAsync(index);
// Отключаем возможность автоматического перехода на новую сцену
// (Но так не работает, сцена все равно запускается)
_asyncLoad.allowSceneActivation = false;
// Проходит один раз по циклу не заходя во внутренний if
// (Второго прохода по циклу нет, где-то здесь запускается сцена)
while (!_asyncLoad.isDone)
{
ChangeProgressEvent?.Invoke(_asyncLoad.progress);
// Сюда не заходит
if (_asyncLoad.progress >= 0.9f)
{
CompletedLoadSceneEvent?.Invoke();
yield break;
}
yield return null;
}
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question