ТОЧКА ВХОДА
Точка входа — LUCA проекта, место откуда все начинается.
А ее первостепенная и единственная задача — прозрачная инициализация проекта/сцены
Критерии прозрачности:
🔹Можно легко найти в проекте/сцене
Объект всегда находится вверху иерархии сцены
На сцене объект всегда называется "EntryPoint"
🔹Сквозное единое именование
Постфикс Scope — для RRR фазы
Постфикс Flow — для фазы инициализации
Пример: BattleScope, BattleFlow, MetaScope, MetaFlow
🔹Единый дизайн классов
Каждый Scope наследуется от класса, предоставляющий функционал IoC контейнера LifetimeScope, MonoInstaller
Каждый Flow начинается с метода Start, в котором происходит вся инициализация
Т.е. мы сначала создаем объекты, inject'им их в Flow, ждем вызова Start и согласно нашему порядку инициализируем.
Из интересного:
🔸Поскольку решение графа и инициализация разделены, то начало работы класса может быть отложено на сколько угодно по времени.
🔸Инициализация в Start освобождает от необходимости помнить что такое ExecutionOrder
Так же защищает от рисков обратиться к внешней зависимости (плагину), которая еще не проинициализирована.
🔸Можно легко включать, отключать части игры, занося блоки инициализации под define
🔸Правило "1 точка входа = 1 сцена" избавляет от racing condition при инициализации
🔸Для инициализации монобехов пишется отдельный метод Init
Start и Awake не реализуются из-за racing condition
Иногда удобно прописать вызов Init в Start, чтобы запустить объект на другой сцене, вне основной системы
🔸Легко сделать примитивный перезапуск игры. Достаточно ещё раз вызвать метод Start
Пост по миграциями собрал больше 15 👍 и я уже начал пилить свою легковесную версию. Следите за обновлениями 😊
Так же думаю сделать базовый шаблон проекта в unity в котором реализую все описанные в #проект_с_нуля рекомендации.
Давайте 30 👍 под этим постом, я за пару недель 👨💻 свою версию, которую вы сможете первой импортировать в пустой проект 😎
#проект_с_нуля@UniArchitect
Post #46
3.33K