arusef
@arusef
Novice .NET dev

Почему Resources.LoadAsync приостанавливает загрузку сцены?

Столкнулся с интересной ситуацией в Unity.
У меня есть сцена А, в которой есть объект SoundManager (он переводится в этой сцене в DontDestroyOnLoad и сохраняется в виде синглтона). Этот менеджер асинхронно пытается загрузить ресурс с помощью Resources.LoadAsync, в реквесте я устанавливаю allowSceneActivation в true, после чего стартует сопрограмма, которая ожидает завершения загрузки (yield) и устанавливает аудиоклип по завершению.
При переходе в сцену В ничего не происходит, однако, когда из сцены В возвращаюсь в сцену А (всё это, используя обычный LoadScene), в момент перехода (находясь ещё в сцене В) я снова заставляю SoundManager подгрузить новый ресурс. И вот в чём беда: эта операция загрузки, несмотря на то, что она асинхронная, не даёт сцене А загрузиться. Сцена загружается только после окончания загрузки ресурса.

У меня есть одна догадка: вероятно, все сопрограммы выполняются в рамках одной активной сцены, и поскольку в момент вызова В была активной, естественно, она ждёт завершения загрузки ресурса, и только потом запускает А. Даже при том, что DontDestroyOnLoad в этот момент присутствует и StartCoroutine вызывается именно на объекте оттуда.

Собственно, возникает вопрос, правильно ли я понимаю суть, и можно ли как-нибудь обойти такую ситуацию?
  • Вопрос задан
  • 628 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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