PragmaGames
@PragmaGames
Увлекаюсь Unity.

Как выполнить асинхронную загрузку сцены?

Всем привет. Пытаюсь сделать асинхронную загрузку сцены с задержкой переключения на нее. То есть сцена должна загрузиться, но переключиться на нее по команде. Пока что есть такое :
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;
            }
        }
    }
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы