asmdef в Unity - что это и зачем они вообще нужны
Что такое сборка?
Если открыть любой Unity-проект и начать писать код, вы уже работаете со сборками, просто неявно.
Наверняка в IDE вы видели кучу сборок:
• Assembly-CSharp
• Assembly-CSharp-Editor
• Zenject
• Zenject-Editor
Это сборки, которые Unity создаёт самостоятельно. Часть из них есть в любом проекте, часть добавляется вместе с добавленными плагинами и пакетами.
Создание asmdef в Unity - это способ создать такую сборку вручную самостоятельно.
Своя DLL внутри проекта, со своими зависимостями, границами и правилами доступа.
Зачем вообще создавать asmdef?
1. Улучшение архитектуры
Без создания сборок весь ваш код хранится в одной большой стандартной сборке.
Но на самом деле в любом проекте есть отдельные логические модули.
Говоря о матч-3 проекте - есть модуль обработок платежей, UI модуль, Gameplay модуль, Core модуль, модуль Unit тестов, модуль инфраструктуры проекта (конфиги, сохранения)
Храня всё в одной сборке - легко нарушить эти разделения. Например, модуль обработки платежей может использовать Match3 модуль.
Хотя, если подумать - зачем ему это?
Используя asmdef ты начинаешь явно описывать зависимости:
• UI знает про Core
• Gameplay знает про Core
• Core ни про кого не знает
В итоге:
• Код становится менее связным
• Модуль реально можно вынести в другой проект
• Появляется ощущение «архитектуры», понимания проекта, а не свалки скриптов
2. Улучшение работы редактора
Без asmdef: изменил любой .cs файл → Unity перекомпилирует весь проект
С asmdef: изменил файл → перекомпилируется только сборка, в которой он лежит
В больших проектах это ощущается особенно сильно. Загрузки редактора будут раздражать намного меньше.
Как создать asmdef?
ПКМ в Project → Window Create → Assembly Definition
Далее необходимо его настроить. В Inspector укажи зависимости на другие сборки.
Для UI - на TextMeshPro. Для Core - на UniTask. Для Gameplay - на Core.
Используй здравый смысл, а не просто выдавай ссылки на всё подряд.
Наставление
asmdef - это сложно.
Ты почти гарантированно столкнёшься с:
• циклическими зависимостями
• ситуациями «почему этот класс теперь не виден»
• болью при рефакторинге
• ощущением, что раньше было проще
Но именно через это:
• приходит понимание архитектуры
• появляется мышление модулями
• происходит переход от «просто пишу код» к осознанной разработке
И это поможет тебе вырасти в Senior разработчика.
Заключение
asmdef - это не серебряная пуля. Не обязательны для маленьких прототипов, не надо пихать везде.
Но если проект живёт больше пары месяцев и ты хочешь, чтобы он не развалился - рано или поздно asmdef дадут большие бенефиты.
И лучше начать использовать их рано и осознанно.
🚀 Пост Guru Unity: @Minerope
Post #434
163

- 🔥 2