Точка входа
Для правильной инициализации нужно одно:
❕Честная загрузка приложения без фейковых ожиданий и шкал.
Это меняет архитектуру объектов, так как загрузка должна быть асинхронной и последовательной.
Звучит не сложно, но часто проект сталкивается с проблемами из-за невнимания к этому:
🔹 Инициализация происходит слишком рано
У меня раньше было искажение что инициализация должна происходить до того как загрузится сцена. Такое решение может привести к неочевидным проблемам.
Например: я с Unity IAP ловил такой баг, что черный экран после сплэша висит больше 5 секунд. Как я тогда понял это связано с тем, что жирная логика инициализации под атрибутом
RuntimeInitializeOnLoadMethod. Помню на проде долго фрустрировал откуда такая ошибка, потому что тот же logcat ничего путного не показывал 🤔🔹 Инициализация детерминирована
Когда RRR и инициализация разделяются, но вызовы методов не упорядочены
Или упорядочены не прозрачно, с завязкой на порядок регистрации или
BindExecutionOrder
🔹 Логика инициализации выполняется раньше решения графаЧастая ошибка - писать весь код инициализации в Start или Awake, смешивая загрузку и инициализацию ресурсов.
Так можно столкнуться с ситуацией, когда ресурс А зависит от ресурса Б, который еще не готов.
Чтобы этих проблем не было, нужно:
🔸 Разделить фазу RRR и инициализации
🔸 Выделить конcтруктор и метод Init(-ialize)
🔸 Сделать сервис загрузки
🔸 Реализовать все Initialize методы
🔸 Запустить инициализацию, когда все компоненты движка 100% загружены
Тут лежит пример как это может быть 👨💻 на практике.
Это реальное тестовое задание, которое я делал пару месяцев назад меня с ним взяли в компанию, где я сейчас работаю
Так же пример точки инициализации с одного из реальных проектов. Для понимания как это выглядит в продакшене 😵💫
#проект_с_нуля@UniArchitect