Можно ли в Unity отменить загрузку сцены?
Я столкнулся с одной интересной проблемой. Кажется, в Unity нельзя отменить загрузку сцены.
Я нахожусь на сцене главного меню. Я асинхронно (через Addressables) загружаю сцену с игрой, с флагом activateOnLoad=false.
Если сцена загрузилась, но не активирована, в ней обязательно выполнятся как минимум Awake на монобехах. Без вариантов. Это случится либо при переходе на любую другую сцену, либо при выходе из Play Mode, если игра запущена в редакторе.
В моём случае это проблема, так как на загруженной сцене успевает проинициализироваться Zenject контекст, что приводит к неожиданным сайд-эффектам.
Я пробовал вызывать разные unload методы, но безуспешно.
Пока что вижу только одно решение - выносить содержимое сцены в отдельные бандлы (аддресабл группы), и загружать их отдельно - а по нажатию кнопки перехода в игру грузить пустую сцену с activateOnLoad=true.
В чате Unity Architectural Astronauts поделились ответом от разработчиков Unity по этому поводу:
I have asked our developers to take a look at this issue and they stated that this is by design. Scene loading, while async, is based around a first-in-first-out (FIFO) queue - loading the second scene does not begin until the first load operation is completed. Both loading and unloading happen on the same queue but unloading can't be queue unless the scene has been fully loaded - this is why SceneManager.UnloadSceneAsync returns null though the scene exists.
We apologize for the inconvenience.
#нерешенное
Post #58
1.49K
- 🔥 7