КОДОГЕНЕРАЦИЯ
Фича, которая реже всего встречается на проектах, где я работал.
Что странно, ведь это очень эффективный инструмент с очень высоким отношением затрат и результата, и вот почему:
1️⃣ Единственный способ увеличить продуктивность программистов — использовать кодогенерацию.
Т.е. генерировать код, для создания которого требуется сформировать абстрактную модель в голове, а потом перевести ее в реальный код.
С учетом того что цикл перевода знаний из краткосрочной в долгосрочную память занимает больше 24 часов (об этом я писал тут и тут).
2️⃣ Вы тратите время только на поддержку кодогенератора, а не кода, который он генерирует.
Если в сгенерированном коде баг — исправляем генератор, а не все объекты, что он создал.
Такая же логика работает для всего, что генератор создает.
Т.е. в сравнении имплементации с кодогенерацией и без, поддерживать нужно будет меньше кода.
3️⃣ Это очень легко.
Чем отличается генерация JSON-файла от генерации скрипта?
— Вообще ничем. Любой класс — это текст внутри файла.
Компилятор увидит эти файлы, сотворит магию (нет) и код будет готов к использованию.
Вот крутой пример из самого популярного DI-контейнера для Unity (всего 90 строк кода
Никаких хаков и продвинутого понимания языка. Просто код, который генерирует код
4️⃣ Это может быть очень быстро.
Вместо использования рефлексии можно сгенерировать код, который будет вызывать нужные методы напрямую.
Из популярного:
🔸Операции (де-)сериализации
Например, тот же Newtonsoft.Json
использует IL Weaving для генерации IL-кода, который преобразует строку в объект во время исполнения программы.
В unity же значение в каждый из элементов объекта проставляется через рефлексию.
Жду реализации через SourceGenerator'ы
🔸Генерация Data Transfer Object'ов
Для общения клиента и сервера, вместо того чтобы писать объекты для данных вручную, можно их полностью генерировать.
Безусловно, такая фича уже давно есть в Swagger и много где еще, но в игровых проектах я все равно встречаю такое редко.
Чаще генерация происходит через первый сайт в google'е
🔸 Связь с нативной частью Unity.
Например, перехват событий из Animation Event можно полностью сгенерировать.
Тем самым избежав типичных: "Ой, эффект на персонаже X перестал работать, посмотри чо там
Мы этот подход использовали на проекте Magic Battle Arena и полностью генерировали из имен fbx-объектов:
🔹 События анимации, которые вызывали нужный метод в коде
🔹 Уникальные типы анимации для каждого персонажа.
Каждый персонаж — свой enum, который всегда консистентен с анимациями, которые на нем есть.
🔹 Настройки для художников спецэффектов.
Добавил fbx, нажал одну кнопку, настройки со всеми типами анимации готовы за 1 секунду.
5️⃣ Можно генерировать целые фичи.
На Magic Battle Arena мы генерировали DTO, (де-)маршалинг данных и Memory Pool для всех этих объектов
Т.е. по сути весь транспортный слой, отвечающий за коммуникацию клиента и сервера, полностью кодогенерировался.
Мы использовали T4 Templates. До сих пор очень мощный и крутой инструмент
Итого:
Лично для себя не вижу ни одного повода чтобы не задавать себе каждый раз перед написанием новой фичи:
"А могу ли я какую-то часть накодогенить?"
Так шаг за шагом и проект сам себя рано или поздно напишет
🔻Давайте соберем маленькую базу мест, где еще кодоген будет полезен.
Расскажите в комментах, где вы используете(-али) кодоген и он сослужил вам верную службу
Ты знаешь кому переслать этот пост.
Ставь 👍 если тебе по кайфу такая движуха
#проект_в_разработке@UniArchitect
Unity Architect: архитектура unity проектов

Создал и веду курс по архитектуре: https://uniarchitect.notion.site
Иногда выкладываю видео и веду стримы: youtube.com/@vangogih
По всем вопросам: @vangogih
کانالهای مشابه



Архитектура Unity проектов: Путь к качественной разработке
Архитектура проектов на Unity стала одной из самых обсуждаемых тем в сообществе разработчиков игр. В последние годы с ростом популярности платформы увеличилось и количество проектов, создаваемых на её основе. Однако успешная разработка игр — это не только креативность и талант. Это также требует грамотного подхода к архитектуре проекта, который может существенно повлиять на его производительность и масштабируемость. Правильная архитектура позволяет командам разработчиков легко интегрировать новые функции, исправлять ошибки и оптимизировать уже существующие системы. В этой статье мы рассмотрим ключевые аспекты архитектуры Unity проектов, полезные советы и лучшие практики, которые помогут вам в создании качественного программного продукта.
Что такое архитектура Unity проектов?
Архитектура Unity проектов — это совокупность структурных и организационных решений, которые определяют, как различные компоненты и системы игры будут взаимодействовать друг с другом. Хорошо продуманная архитектура помогает разработчикам поддерживать код и улучшать его, что в конечном итоге приводит к более качественному и стабильному продукту.
Ключевыми элементами архитектуры проекта являются модули, классы, скрипты и их взаимодействие. Например, использование паттернов проектирования, таких как MVC (Model-View-Controller) или ECS (Entity-Component-System), может существенно повысить гибкость и переиспользуемость кода в рамках вашего проекта.
Каковы основные принципы проектирования архитектуры в Unity?
Среди основных принципов проектирования архитектуры в Unity можно выделить принципы SOLID, которые включают единственную ответственность, открытость/закрытость, подстановку Лисков, сегрегацию интерфейсов и инверсии зависимостей. Эти принципы помогают структурировать код так, чтобы его было легко тестировать и расширять в будущем.
Кроме того, важно применять правила DRY (Don't Repeat Yourself) для минимизации дублирования кода и KISS (Keep It Simple, Stupid), чтобы архитектура оставалась простой и понятной. Это также включает в себя использование инструментов и библиотек, которые могут помочь упростить процесс разработки.
Почему важна хорошая архитектура для игры на Unity?
Хорошая архитектура критически важна, потому что она определяет, насколько легко команде разрабатывать, поддерживать и расширять проект. Если архитектура спроектирована плохо, это может привести к проблемам с производительностью, сложностям в поддержке и затруднениям при добавлении новых функций.
К тому же, хорошая архитектура позволяет избежать технического долга, который может накапливаться, если код написан без должной структуры и планирования. Это может сделать проект уязвимым к ошибкам и затруднить его адаптацию под новые требования.
Каковы распространенные ошибки в архитектуре Unity проектов?
Одна из распространенных ошибок — это отсутствие планирования на начальных этапах разработки. Многие разработчики спешат перейти к написанию кода, забывая о важности создания архитектурных схем и документации. Это может привести к неразберихе в проектах и техническому долгу.
Другой распространенной ошибкой является избыточная сложность. Некоторые разработчики пытаются внедрить слишком много паттернов проектирования в проект, что делает код более запутанным и трудным для понимания. Важно сохранять баланс, чтобы архитектура оставалась простой и интуитивно понятной.
Какие инструменты могут помочь в проектировании архитектуры для Unity?
Существует множество инструментов, которые могут помочь вам в проектировании архитектуры вашего Unity проекта. Например, UML-диаграммы могут быть полезны для визуализации структуры вашего проекта и взаимодействия между компонентами. Средства для управления версиями, такие как Git, также критически важны для отслеживания изменений в коде.
Другие полезные инструменты включают Unity Collaborate для совместной работы и Asset Store, где можно найти библиотеки и пакеты, которые могут помочь внедрить определенные архитектурные паттерны без необходимости писать код с нуля.
کانال تلگرام Unity Architect: архитектура unity проектов
Если вы увлечены миром unity проектов и архитектурой, то канал "Unity Architect" (@uniarchitect) - это именно для вас! Этот канал является авторским блогом unity lead'a, который делится своим опытом и знаниями по архитектуре проектов. Он не только рассказывает о своем собственном пути в этой индустрии, но и делится полезными советами и инсайтами.
На канале "Unity Architect" вы найдете множество интересных статей и рассказов о том, как создавать качественные unity проекты, о правильной архитектуре и о том, как достичь успеха в этой сфере. Если вы хотите углубить свои знания и стать профессионалом в области unity, то этот канал станет незаменимым помощником на вашем пути.
Кроме того, автор канала также ведет свой YouTube канал, где вы можете найти еще больше полезной информации и обучающих материалов. Присоединяйтесь к сообществу unity разработчиков и архитекторов, обменивайтесь опытом и учите друг друга!
Для всех вопросов и обсуждений вы можете обратиться к автору канала по юзернейму @vangogih. Присоединяйтесь к каналу "Unity Architect" и начните свой путь к успеху в мире unity проектов и архитектуры!