Dernières publications de Unity Architect: архитектура unity проектов (@uniarchitect) sur Telegram

Publications du canal Unity Architect: архитектура unity проектов

Unity Architect: архитектура unity проектов
Авторский блог unity lead'a. Пишу про архитектуру проектов и свой путь.

Создал и веду курс по архитектуре: https://uniarchitect.notion.site

Иногда выкладываю видео и веду стримы: youtube.com/@vangogih

По всем вопросам: @vangogih
3,395 abonnés
9 photos
75 vidéos
Dernière mise à jour 10.03.2025 06:30

Canaux similaires

ECS Comrade
1,033 abonnés

Le dernier contenu partagé par Unity Architect: архитектура unity проектов sur Telegram

Unity Architect: архитектура unity проектов

14 Jan, 08:02

3,572

КОДОГЕНЕРАЦИЯ

Фича, которая реже всего встречается на проектах, где я работал.

Что странно, ведь это очень эффективный инструмент с очень высоким отношением затрат и результата, и вот почему:

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 проектов

30 Dec, 13:13

1,226

🎁 Уже завтра розыгрыш!

Я с ребятами все это организовывал, попробуйте залететь, вдруг повезет 😜
Unity Architect: архитектура unity проектов

26 Dec, 15:55

4,901

МНОГОСЛОЙНАЯ АРХИТЕКТУРА: ПРEМЬЕРА ВИДЕО

Начинаем через 5 минут, подключайся скорее 🛞

Разберем:
🔸Структуру организации и то как она копируется в структуру проекта
🔸 Как можно представить любую игру на unity в виде слоев
🔸 Пример структуризации проекта моей студии silverfox games

➡️ССЫЛКА НА ПРЕМЬЕРУ

@UniArchitect
Unity Architect: архитектура unity проектов

25 Dec, 15:01

4,455

МНОГОСЛОЙНАЯ АРХИТЕКТУРА: ПРЕМЬЕРА ВИДЕО

Я долго думал какую активность можно замутить в преддверии Нового Года.

Потому я просто взял 10ю лекцию вашего последнего курса по архитектуре и выложил ее на youtube 😎

✏️ Потому завтра в 19:00 МСК встречаемся на моем youtube канале.
Посмотрим видос, пообщаемся в чатике трансляции и хорошо проведем время 😊

Разберем:
🔸Структуру организации и то как она копируется в структуру проекта
🔸 Как можно представить любую игру на unity в виде слоев
🔸 Пример структуризации проекта моей студии silverfox games

Ставьте себе уведомление и до встречи 👋

➡️ ССЫЛКА НА ПРЕМЬЕРУ

@UniArchitect
Unity Architect: архитектура unity проектов

16 Dec, 16:01

1,777

🎁Новый год — новые клавиатуры! Участвуй в розыгрыше 13 топовых механических клавиатур!

Мы, совместно с шестью каналами по разработке игр, решили устроить для вас настоящий новогодний сюрприз! Вместо стандартных поздравлений мы решили организовать масштабный розыгрыш с крутыми призами — 13 полноразмерных высококачественных механических клавиатур с LED-подсветкой, которые подойдут как для разработчиков игр, так и для геймеров. Победители смогут выбрать цвет клавиатуры на свой вкус!

📌 Условия участия просты:

1. Подпишись на 6 каналов:
💋 Unity Architect
💋 Baxx Studio
💋 Kozlov Dev
💋 Сазонов о Web
💋 Григорий Дядиченко
💋 GameDev. Путь Самурая

2. Нажми кнопку «Участвую».

🗓 Результаты будут объявлены 31 декабря в 20:00 в канале Baxx Studio. Победителей выберет RandomGodBot.

За арт спасибо @hellbrush_art

🎄 Желаем удачи и с наступающим Новым годом! 🎄
Unity Architect: архитектура unity проектов

08 Nov, 07:00

4,444

Всем привет!

Я Лёша, и вот уже 9 лет работаю с Unity, а около 5-6 лет помогаю компаниям разрабатывать игры на Unity.

Большую часть своей карьеры я занимал позицию Lead, создал несколько проектов с нуля, а также пару лет назад мы с партнёром привлекли 400k$ и пытались создать свою игровую студию.

Более подробно об этом опыте вы можете почитать в статьях:
1️⃣ КРАТКИЙ КАРЬЕРНЫЙ ПУТЬ
2️⃣ SILVERFOX GAMES НАЧАЛО
3️⃣ ЖИЗНЬ ПОСЛЕ SILVERFOX

Последний год я работал в компании Datasakura откуда помогал компании Zeptolab улучшать их проекты в числе которых:
✈️ Overcrowded: Tycoon Idle Plane
😊 Cut The Rope: Daily

Полный список мест, где я работал, и проекты, над которыми трудился, вы найдёте в моём LinkedIn:
https://www.linkedin.com/in/alexey-kozorezov/ <— закидывайте connect, добавлю всех 😊

В этом канале я стараюсь писать про архитектуру Unity-проектов, а также обо всём, что так или иначе связано с Unity.
Иногда делюсь историями о своей карьере под тегом #моя_история.

Самые популярные статьи:
1️⃣ МЫ ИНЖЕНЕРЫ, НЕ ХУДОЖНИКИ
2️⃣ ПРИЧИНА И СЛЕДСТВИЕ
3️⃣ КОГНИТИВНАЯ СЛОЖНОСТЬ Ч.2. <— есть еще первая часть, обязательно чекните 😉

Так же есть навигация, не стесняйтесь пользовать hashtag'ами, чтобы найти статьи на интересующие вас темы 😊

🏠 Я живу в Испании и недавно переехал в Барселону.
Буду рад встретиться на бранче, если вы живёте рядом или проездом 🥄

Этот блог я постепенно хочу превратить в платформу для разработчиков уровня middle+, где каждый сможет найти ответы на сложные вопросы о нюансах работы в Unity.
Подробнее об этом я рассказывал в своем посте ЦЕЛЬ

И напоследок:
🔸 Я простой разработчик-самоучка, с длинным, сложным и извилистым карьерным и жизненным путем.
Я вырос в маленьком городе в Сибири и постепенно с нуля как-то добрался до блога и Барселоны.

🔻Моя цель — заполнить пробел в информационном вакууме между уровнями junior и senior в разработке игр на Unity, с фокусом на материалы, которые можно перепроверить самостоятельно.

Таким образом это будет win-win для всех:
Для вас — качественный контент, а для меня — ресурсы, которые я могу конвертировать в образовательную деятельность.

Ставь 👍, если вам по кайфу такая движуха!
Ну и, добро пожаловать 🫡

@UniArchitect
Unity Architect: архитектура unity проектов

07 Nov, 07:00

3,811

СОЗДАЕМ СВОЮ ИГРОВУЮ СТУДИЮ

У меня за плечами есть опыт создания не большой игровой студии.

Для тех кто пропустил:
Раз, Два

Прохождение сложного этапа поиска инвестора и перевода средств — это лишь начало.
Следующим шагом нужно открыть компанию, которая сможет принимать заработанные средства из Apple Store и Google Play, а так же платить зарплаты и за обслуживание серверов.

Основные шаги:
🔸 Выберите локацию для компании
🔸 Найдите посредника для удалённого открытия
🔸 Определите тип компании

Возможные локации:
🔹 США (Делавэр)
🔹 Сингапур — здесь зарегистрирована silverfox.games
🔹 ОАЭ

Лучшие типы компаний по гибкости и минимальной операционке:
🔸 Ltd., LLC — продвинутый аналог ООО, где акции распределяются, а ответственность несёт компания, а не вы.

Компанию открыть несложно (с помощью платформ типа Stripe и Osome), но с банковским счётом сложнее.

К счастью, можно найти растущие нео-банки (tier-2, tier-3), и примерно через 2-4 месяца у вас будет компания, готовая принимать платежи и оплачивать сервисы.

И последний барьер, который нужно преодолеть:
Выплаты зарплат из за рубежа в РФ и наоборот.

И это большая проблема. В Silverfox в пике расходы за оплату труда переваливали за несколько миллионов в месяц.

А такие объемы проводить каждый месяц, это не счет за ресторан разделить 😅
У банка и валютного контроля быстро появятся вопросы.

Пару лет назад я использовал промежуточные счета в странах СНГ, с которых потом переводил все на счет компании в Сингапуре.

Но это то как это было у меня 2 года назад.

🔻А сейчас благо уже ребята подсуетились и сделали удобный сервис: salary.cab

⚡️Они с минимальной комиссией и платеж в чистую проведут и всю документацию закрывающую сгенерируют.

Потому что одно дело подписать договор, другое дело делать по нему платежи и всегда под рукой иметь документацию, чтобы счета неожиданно не заморозили. 😱

Я вот все доки ручками делал и на эту мантру у меня уходило по 4-6 часов в день зарплат.

А с salary.cab экономил бы кучу времени 😊

Получать ЗП из за рубежа и получать все бенифиты от плавающего курса оч приятно. 🥰

Ну, а дальше дело за малым:
Сделать успешную игру 😅

@UniArchitect
Unity Architect: архитектура unity проектов

30 Sep, 08:00

5,023

НАПИСАЛ 3 СИСТЕМЫ АБИЛОК С НУЛЯ И ВОТ ЧТО Я ПОНЯЛ

Для системы, в которой будет удобно работать важно:

1️⃣ Отделить данные от бизнес-логики
Т.е. объект игрока/героя/персонажа со всеми данными должны быть полностью отделены.

И это нужно не для тестирования или потому что так Дядя Боб завещал, а для свободной модификации в любом месте.
Данные ходят из слоя в слой из системы в систему по разными причинам:
🔸 Для отрисовки UI
🔸 Для отправки по сети
🔸 Для модификации в других системах
🔸 Для отката в предыдущее состояние
В случае десинхронизации клиентов или неправильным изменением данных (выход за пределы рабочих значений)

И если сделать данные частью какого-то объекта (агрегировать их) , то нужно будет таскать везде его.

Правила для легкой масштабируемости:
🔹 При добавлении контекста не связанного домена использовать композицию, не наследование.
Перегружать данные в наследнике = ломать совместимость моделей между системами/фичами.
🔹 Если работаете с сервером, то сначала принимаете данные, потом показываете изменение игроку.
Эта пауза необходима, иначе не будет времени проиграть все красивые анимации и эффекты.

Минусы:
— Нужно жестко следить за порядком изменения данных.
Модификация в неправильный момент может сломать всю логику.

2️⃣ Не создавать мелкий кипиш. 1 абилка - 1 класс для всей логики.
Вам не нужен этот SRP, вы заплатите высокой когнитивной сложностью системы (раз, два)

3️⃣ Порядок и правила применения в одном месте.
Бизнес-правила верхнего уровня (управление порядком применения/добавления/удаления/синхронизация) на верхнем слое в одном месте.
Весь кипишь с модификацией данных, проигрыванием эффектов, изменения UI и т.д. внутри.

4️⃣ Сервис абилок лишь предоставляет API для их применения
Он лишь выступает фасадом, что агрегирует в себе все сервисы по работе с абилками.
А внешние сервисы лишь вызывают методы в нужный момент игры (клик пользователя, ответ от сервера и пр.).

Таким образом у вас получается одно место где вы можете управлять всеми абилками.
А поскольку это фасад, то вся логика размещенная в разных подсистемах жестко ограничена.

Что делает саму систему Clear (прозрачной) для понимания по Cynefin framework'у.
А значит легкой для работы и внесения изменений без сторонней помощи.

Темы про:
🔸 Многослойность архитектуры
🔸 Cynefin framework'у
🔸 Когнитивной сложности

👇И многое другое, уже есть в курсе:
https://uniarchitect.notion.site/

Записывайся скорее, осталось всего 6 дней до старта!

#проект_в_разработке@UniArchitect
Unity Architect: архитектура unity проектов

15 Sep, 15:55

3,821

РОЛИК АРХИТЕКТУРА КОНФИГОВ

На моем youtube канале вышло видео — консультация с разработчиком, который обратился ко мне за помощью.

Его поставили на новый проект в котором нужно было наладить процесс работы с конфигами.

В видео:
🔸 Какие неформальные требования есть к системе работы с конфигами
🔸 Несколько подходов, как можно организовать работу с ними.
Через third party сервисы и через собственное серверное решение
🔸 Рассказал как были устроены конфиги на проекте Magic battle Arena
+ несколько фишек по работе в Google Sheets

Ссылка на ролик: https://youtu.be/8fqkRFSCATg

Приятного просмотра 😎

@UniArchitect
Unity Architect: архитектура unity проектов

12 Sep, 10:00

3,937

ОТЛАДКА СБОРКИ ANDROID ПРОЕКТОВ

Все мы знаем каким изнурительным бывает процесс поиска проблемы с зависимостями для android.

Как правило в проектах часто используются сторонние third party решения для рекламной медиации, конфигов и атрибуции пользователей
Чаще всего это:
🔸Firebase
🔸IronSource
🔸AppsFlyer
🔸Facebook

И не менее часто после импортирования в проект одного или нескольких решений, билд перестает успешно собираться. мем 🤣

Безусловно google проделал большую работу, чтобы предоставлять как можно больше информации.
Но есть отдельный сорт проблем, который, как мне кажется, даже с нормальными логами отследить невозможно:
Duplicate class android.support.customtabs.ICustomTabsCallback 
found in modules browser-1.4.0-runtime.jar (androidx.browser:browser:1.4.0)
and jetified-androidx.browser.browser-1.0.0-runtime.jar (:androidx.browser.browser-1.0.0:)

И таких примерно 5000 строк

Что это вообще значит?
🔻 Это ошибка в решение графа зависимостей нативных пакетов в android проекте.
У нас есть сборщик maven или gradle, который анализирует проект, берет все версии зависимостей и качает их в проект.

Т.е. IronSource имеет зависимость A, которая требует зависимость B.
А Firebase имеет зависимость B, но другой версии.
И оба пакета используют одно и то же, но разных версий.

При том зависимости есть 3 уровней:
🔹Проект - то что вы указываете в проекте
Мы можем поправить
🔹Пакет - то что указано в импортированном пакете
Мы можем поправить
🔹Компиляция - версии нативных компонентов android
Можем только плакать😭

И вот вы получаете лог в 20МБ в котором тупо список дублирований каждого класса в конфликтных зависимостях.
О том как такое исправлять на youtube никто не выложит. Это скучно, долго и сложно 😴

Дальше я поделюсь процессом, как я решаю подобного рода проблемы:
1️⃣ Импортируем android проект и открываем в android studio
Build -> Android -> Export Project
2️⃣ Когда проект без ошибок открывается и синхронизируется, в проекте UnityLibrary -> build.gradle файл
И комментируем task'у с компиляцией IL2CPP кода — вызов метода BuildIl2Cpp
Тем самым мы сразу экономим кучу времени на компиляции проекта.
3️⃣ По очереди комментируем каждую зависимость, которая прописана в dependencies и смотрим отключение какой зависимости(-ей) убирает ошибки.
Записываем ее в блокнотик.
4️⃣ Переходим на сайт mvnrepository.com и смотрим какие зависимости используются проблемным пакетом
5️⃣ Включив только проблемную зависимость по очереди включаем все зависимости и смотрим с чем конфликтуем
6️⃣ Пытаемся изменить версию пакетов таким образом, чтобы ошибка ушла
Или удаляем один из пакетов 🤷‍♂️
У меня так было с одной старой зависимостью facebook, 100% там бэкдор от спец. служб 😅

Так же этот процесс можно перенести на сторону unity и сделать resolve зависимостей через EDM4U
Обычно, если есть конфликты, то EDM4U изменит версии пакетов и напишет об этом в консоли.
Что может значительно сократить время на поиск, подсветив конфликтный пакет.

Что еще может помочь:
🔸Перегенерировать все gradle, xml, properties файлы что лежат в Plugins/Android
🔸Ручками скачать зависимости из удаленного репозитория
🔸Переместить их в папку Plugins
🔸Если зависимость типа aar, так же скачать pom файл и прописать все зависимости из него в dependencies внутри build.gradle
🔸Или развернуть собственный maven репозиторий в котором вы поправите версии зависимостей в pom файле

Ну и секретный метод, в случае если ничего не помогло:
Вырываем листик из блокнотика, крепим к кукле-вуду и тыкаем иголкой пока ошибка не уйдет 🤬

На случай если ваш проект после обновления unity перестал собираться, потому что версия gradle была обновлена с версии 4 на 7+, рекомендую держать это пост в сохраненках.
Иначе как у меня пара недель уйдет на сборку и отладку.

Это были заметки с сожженного стула, надеюсь вы никогда с этим не столкнетесь и вам не пригодится этот пост.
А для всех остальных бедолаг, я зарядил этот пост у потомственной бабки шаманки на оберег от проблем с зависимостями уровня компиляции 🫡

Ставь 👍 или оберег не сработает 🤣

#будни@UniArchitect