Сборки (Assembly definition, asmdef) — unity обертка над сборками в .NET.
По факту это json в котором прописана конфигурация .NET Assembly.
Это делает сборки неотъемлемой частью архитектуры, потому что каждую сборку можно версионировать, проставлять в нее зависимости, определять отдельные define’ы.
Так же по умолчанию она поддерживает проверку на циклические зависимости.
У себя на проектах я выделяю такие сборки:
🔹 Runtime — клиентский код
🔹 Editor — утилиты редактора
🔹 Tests.PlayMode — интеграционные тесты.
Т.е. тесты, для которых требуется unity scripts lifecycle
🔹 Tests.EditorMode — unit тесты
Для онлайн приложений так же выделяю:
🔹 Transport — cпецифичная для клиента связь с сервером. Реализация подключения, обмена данными, переключение состояний
🔹 Shared — общие с бэком модели данных, константы, конфиги и прочее.
Т.е. эти сборки является моделью домена и явно отделяют отображение unity (слой Presentation) от источника данных (слой Data Source)
Что-то на архитектурном, будет отдельный пост про это
Выделение этих частей позволяет mock'ать клиентскую часть и запускать клиент без unity т.е. должны стоять галки
No Engine References
Из интересного:▫️ В define constrains поддерживает отрицание. Т.е. можно выключить всю сборку для PROD define’ов
▫️MonoBehavior нельзя добавить как компонент на объект если в
Platforms отмечен только EditorЧтобы это обойти, поставьте галку на любую платформу, под которую 100% проект никогда не будет собран (Stadia например)
▫️ Для удобства редактирования и отслеживания изменений в git, уберите галку
Use GUIDs
▫️ csc.rsp можно положить рядом с asmdef и прописать туда дополнительные параметры компиляцииУдобно когда нужно подключить большой список define’ов или отключить надоедливые warning’и
▫️Можно делать точеные оптимизации или патчи IL кода через Mono.Cecil или Harmony. Так раньше был сделан inject в VContainer
▫️Если сборка не изменилась, то перекомпилироваться она не будет. Таким образом, разбивая крупные сборки на более мелкие, можно значительно снизить время компиляции проекта. Из комментов, спасибо @Bogotoff.
А какие сборки вы выделяете в своих проектах?
👨💻 в комменты, я создал
#проект_с_нуля@UniArchitect