P
P
Pragma Games2022-03-05 11:56:15
Unity
Pragma Games, 2022-03-05 11:56:15

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 question

Ask a Question

731 491 924 answers to any question