Папка проекта
Перед тем как написать первую строчку кода, нужно решить очень важную проблему — быстрое захламление иерархии проекта. Чтобы последующие N-лет работать с ней без головной боли.
Обычно происходит как: создается проект, в этой же папке создается git репозиторий — profit.
Например:
У вас плание backend с общей shared частью (это общий код для бэка и клиента, например модели). И вам нужно где-то хранить скрипты для копирования shared части.
Или бэкенд лежит в одном репозитории с клиентом.
Или CI/CD пайплайн потребует запуска кастомных скриптов.
Или есть внешние конфиги, которые вы хотите хранить вне папки Assets, чтобы они не попали в билд (например конфигурации сборки билда).
+ unity генерирует кучу папок, которые не попадают в репозиторий, но есть локально (Library, Debug, Temp, obj и прочие).
+ файлы, которые генерирует Rider и VS.
Поздравляю! Ваша когнитивная сложность выросла в 5 раз, а иерархия превратилась ПОМОЙКУ 🤥
КАК ЭТОГО ИЗБЕЖАТЬ?
У себя на проектах я делаю такую иерархию:
+-- %project_name%
| +-- .git
| +-- %project_name%.Build
| +-- %project_name%.ExternalConfigs
| +-- %project_name%.ThirdParty
| +-- %project_name%.Keystore
| +-- %project_name%.Backend
| +-- %project_name%.Kubernetes
| +-- %project_name%.Unity
| | + -- Assets
| | | +-- _Project
Плюсы:— Unity проект отображается в Unity Hub адекватно
— Внешние и внутренние файлы разделены
— Декларативность == низкая когнитивная сложность
Минусов нет 😎
Папка _Project
Поскольку нет единого гайдлайна для именования и структуры папок, то со временем, папка Assets тоже превращается в помойку. И любой импортированный в проект пакет ассетов может наследить в иерархии так, как ему вздумается. Создавая сколько угодно своих папок в корне.
Со временем когнитивная сложность растет и поиск нужной папки отнимает все больше и больше времени.
Отдельная папка выделяет место чисто под файлы вашего проекта. И вы можете выстроить свою иерархию, в которую ни один из импортируемых ассетов не влезет.
Нижнее подчеркивание нужно для сортировки и отображения в вершине иерархии.
Внутри _Project делаю такую иерархию:
+-- _Project
| +-- Art
| +-- Develop
| +-- Plugins
| +-- Resources
| +-- Scenes
| +-- прочие папки
Плюсы:— Быстрая адаптация новых людей
— Легкая масштабируемость
— Поскольку наши файлы и файлы импортируемых ассетов лежат отдельно, обновление последних происходит без головняка и без риска задеть наши файлы
Минусы:
— Глубокая иерархия - увеличивает когнитивную нагрузку
— Требуется порядок и правила создания новых папок - чтобы со временем не стало помойки
— Некоторые папки типа StreamingAssets нельзя скопировать к себе в _Project
В следующем посте цикла "проект_с_нуля" — структура сборок
#проект_с_нуля@UniArchitect