4988
Авторский блог unity lead'a. Пишу про архитектуру проектов и свой путь. Мой курс по архитектуре: https://vangogih.notion.site/cb0f15e57d5a4f10b2a7df9664b8e5f9 Иногда выкладываю видео и веду стримы: youtube.com/@vangogih По всем вопросам: @vangogih
AI НЕ ДЕЛАЕТ ВАС ПРОДУКТИВНЕЕ
Незыблемый факт: AI уже очень хорош в маленьких задачах.
Написать плагин, скрипт, небольшую tool'у, UI для UnityEditor окна, вытащить текст из аудио, накидать интеграцию с Google Sheets — вот здесь он реально экономит время.
У меня таких историй уже пачка:
— история буфера обмена на macOS
— парсинг локализаций из Google Sheets в MySQL
— извлечение текста из аудиозаписей
— терминальный чат для тестирования внутриигрового чата
— интеграция BenchmarkDotNet в Unity
И тут спорить бессмысленно: да, это ускоряет. Многие мелкие автоматизации можно сделать буквально за 1 промпт.
Когда раньше, я даже не брался за это, т.к. на отладку и написание могло уйти полдня-день.
🔸Проблема - большой production
Когда я работал в Playtika, уже тогда менеджмент пытался понять, как ускорить процессы разработки через AI.
Но модели упирались в контекст. Они могли решить локальную задачу, но плохо держали систему целиком.
Сейчас модели стали намного сильнее. Контекст вырос. Opus уже технически способен написать кусок фичи почти полностью.
Но я всё равно не готов просто взять и запушить это в большой production-проект.
Почему?
Потому что в проекте на сотни тысяч строк AI все равно не хватит контекста, чтобы изучить и прочитать все что есть, из-за этого:
🔹Генерируется функционал, который уже есть в проекте
🔹Системы используются не правильно или не полностью
🔹Агент может посчитать, что функция в другой системе написана не правильно и "исправить".
И кажется что сделано много, так много кода и анализа никто бы из нас быстро не делал.
Но из-за того что это нужно потом вычитать внимательно, проверить и/или переписать, общее время на разработку может только увеличится.
🔸И это не только мое наблюдение
METR проверили это на 16 опытных open-source разработчиках, которые в среднем 5 лет работали на своих репозиториях.
Результат: с AI они стали медленнее на 19% 🤯
При этом ожидания до начала эксперимента были: ускорение на 24%
А после, разрабы думали что AI их ускорил на 20%.
Т.е. человек делает больше и из этого создается эффект ускорения.
И эти результаты нужно поправлять за Echoes of AI, где:
на чужой кодобазе среднего размера AI действительно ускорял — медианное время падало на 30.7%.
Природа разработки ПО - это перенос информации из мира реального в мир абстрактный. Где человек играет ключевую и незаменимую роль.
y ≈ Smin · ln(Smax / x)kLOC | эффект
------+-------
5 | +23%
50 | +12%
500 | 0%
ПРОКЛЯТИЕ ПЕРЕИСПОЛЬЗУЕМОСТИ
Делюсь болью. Я последние 5 лет на разных уровнях у разработчиков, лидов и техдиректоров, активно встречаю такой паттерн:
Ну давай просто выделим общее и переиспользуем это в другой системе/проекте.
Ну тут сделаем абстрактно, чтобы другие системы, вдруг, взяли и переиспользовали эту логику.
Пока система или её часть не переиспользуется как минимум в трёх независимых местах — ничего общего выделять не нужно.
АЛҒА, АСТАНА!
Лечу в командировку в Астану на 3 дня — с 22 по 24 июня.
И 23 Июня вечером хочу попробовать организовать встречу 😎
Если среди читателей есть кто-то из столицы Казахстана — буду рад встретиться вживую. Пообщаться за архитектуру, разработку, проекты и просто за жизнь.
А если наберётся достаточно народу — попробую организовать мини-митап. Без пафоса: кофе🍻, разговоры за код, обмен опытом.
🔸 Если ты в городе или рядом:
— залетай в группу
— там обсудим детали: где, когда и сколько нас собирается
Проектируем проект уровня Gardenscapes
Я не просто так задавал в канале вопросы про стрим 🤓
В эту Субботу, 13.06.2026 в 14:00 МСК не планируйте ничего.
Потому что в это время в режиме реального времени будем пытаться запроектировать проект масштаба Gardenscapes 🤯
Формат будет примерно такой:
🔸Начало и предисловие
🔸Задание ограничений (иначе в 2 часа не уложимся)
🔸Проектирование уровня систем, контейнеров и компонентов по C4
Стрим будет на youtube 😊
Я прислушался к результатам опросов и составил материал так, чтобы примерно 60% мы проектировали, 10% я показывал слайды и 30% уделял примерам в коде.
Я носил идею этого стрима еще с момента когда вел курс, это была одна из рекомендаций одного из учеников 🫡
🔻Так что:
Если тебе по кайфу такая движуха, кликай по кнопке ниже и бот отправит тебе напоминание и ссылку на стрим за 10 минут до его начала 🛞
До встречи!
@UniArchitect
ВЫЗВАЛ И ЗАБЫЛ
В прошлой статье я разобрал что такое cross-cutting concerns — системы, которые пересекают всю кодовую базу, но не являются бизнес-логикой. Сегодня — как с ними работать на практике.
🔸Что такое "call and forget"
Cross-cutting concerns — общепринятый термин. "Call and forget" — то, как я называю эти системы на практике.
Название описывает паттерн использования:
— Вызывающий код не ожидает возвращаемого значения
— Внутреннее состояние системы не влияет на бизнес-логику вызывающего
Примеры из каждого проекта:
▫️ Логирование — записал событие, пошел дальше
▫️ Аналитика — отправил трек, не ждешь ответа
▫️ Звуковая система — запустил звук, геймплей не зависит от результата
▫️ Вибрации — тактильная обратная связь, fire and forget в чистом виде
▫️ Toast'ы / Hint'ы — показал уведомление, логика продолжается
Ключевое свойство: убери любую из этих систем — и геймплей не изменится. Они ортогональны бизнес-логике.
🔸Почему singleton
Обслуживающий код занимает большую часть систем и "размывает" логику, которую мы хотим править.
Архитектурно я хочу чтобы на это тратилось как можно меньше места в рабочих классах.
Потому надо выбрать самый компактный способ связать классы друг с другом. И таковым является singleton.
Т.е. часть систем в каждом проекте можно спокойно сделать как SomeSystem.Instance.DoSmth — и проект от этого только выиграет. Но с правилами.
🔸Когда singleton — проблема
Проблема не в подходе, а ЧТО через него делают. Возможность вызвать бизнес-логику через глобальный доступ создает хаос связей.
Любой скрипт — визуальный эффект, UI-элемент — может напрямую командовать Game, Player, Economy.
Дочерние элементы обращаются к головным, образуя неконтролируемый граф зависимостей.
Но "call and forget" системы по определению не возвращают управление в бизнес-логику. Связь — однонаправленная.
А значит и проблем не будет, если правильно "готовить" работу с такими системами.
🔸Рецепт приготовления signleton
🔹Ингредиент 1: Явный lifecycle
Singleton создается и уничтожается в выделенных фазах — там же где регистрируются зависимости в DI-контейнере.
Никакихget { _instance = new Class(); return _instance; }
Рядом сdiContainer.Register<IMyService>().AsSingle()
ты так же явно прописываешьAudioService.Instance = new AudioService().
Один файл, одно место, полный контроль.
Я подробно разбирал Composition Root и фазы RRR в статье про DI, а проблемы с порядком инициализации — в статье про точку входа.
🔹Ингредиент 2: Доступ через интерфейс
Singleton отдает не конкретный класс, а интерфейс. Т.е. публичное свойство IAudioService, а не AudioService.
Первая причина — тестируемость. Можешь подставить заглушку в тестах.
Вторая — подмена по окружению.
Для dev-окружения аналитику заменяешь на логирование, звук в тестах — на NullAudioService, вибрации на десктопе — на StubHaptic.
🔻 Архитектурные решения — это всегда компромисс. А если тебе кажется что компромисса нет, значит ты его ещё не нашел. Вот так использование не самого любимого и проблемного паттерна может помочь замедлить рост сложности проекта.
Ставь 👍 если тебе заходит такого рода контент!
Ты знаешь кому переслать эту статью 💪
#решения@UniArchitect
ПРО AI: ПОЧЕМУ Я МОЛЧАЛ 3 ГОДА
Сегодня день рождение блога — 3 года 🥰
И вот что забавно: за все эти годы я ни разу нормально не написал про AI.
Хотя использую его уже примерно 2.5 года — с того самого момента, когда ChatGPT начал жёстко хайповать.
Я, как и все остальные, не смог предвидеть никакую “новую эру”.
Просто залетел в волну хайпа и начал проверять:
окей, а где это вообще может быть полезно в реальности?
Код в продакшен пушит не модель. Его пушит человек. И отвечает потом тоже человек.
Розыгрыш 🎮
Я регулярно принимаю участие в папках т.к. это один из самых эффективных способов рассказать о канале другим крутым разработчикам.
И я был очень занят работой над курсом, мне было не до этого и я предложил одному из админов просто взять на себя организацию 😅
И какой раз, он организовывает качественные движухи, которые, надеюсь, помогают найти новые прикольные каналы по Unity тематике.
В этот раз чуть другой формат, розыгрыш.
Просто скинулись с админами на крутые призы, сделали простые условия для принятия участия:
🔸Steam Deck
🔸VR Quest 3S ×2
🔸Xiaomi Monitor 27” 2560×1440 2K 200Hz HDR400 ×2
Условия участия:
1️⃣ Подписаться на папку The GameDev со всеми каналами
2️⃣ Нажать Участвую
⏰ Итоги подведём 25.05.2026 в 20:00. Отправка призов только по РФ.
Это чисто движуха собранная одним человеком, с качественными и активными каналами 🫡
ПРОЕКТИРОВАНИЕ: КОД
В 2020 году я работал лидом в Chill Gaming на проекте Combat Quest — клон Archero. Первый проект, где я набирал команду под своё видение.
До этого я только читал важные и серьезные книги от Мартина Фаулера и Роберта Мартина и был на 100% уверен что обязательно разработка каждой фичи должна начинаться с ее проектирования кода и классов.
Потому каждая новая фича сопровождалась документом с детальным описанием классов и их связей между друг другом.
Не буду ходить вокруг, просто 3 факта из этого опыта:
1️⃣ Даже я сам читал документы по диагонали.
Уровень детализации слишком высокий, а логики в диаграммах нет. Толку в это вникать, если кода еще нет ...
2️⃣ Поддержка диаграмм отнимала ~20% времени разработки.
Код менялся быстрее, чем обновлялись схемы.
3️⃣ Побочный эффект: разработчики боялись лезть в задокументированные системы.
Изменения в коде системы = внесение изменений в документацию.
Это был первый прецедент, когда рекомендации из книг не сработали на практике.
🔸Что говорит C4 про уровень кода
В серии про проектирование мы прошли три уровня: система, контейнеры, компоненты. Остался четвёртый — код.
Сайт C4 model прямо говорит:
This is very much an optional level of detail... Ideally this diagram would be automatically generated using tooling.
РЕГРЕСС: КОНТРОЛИРУЕМ ОБЪЕМ ИЗМЕНЕНИЙ
Самый большой рефакторинг за всю карьеру включал систему примерно на 10к строк.
Это был симулятор бильярда — целый режим игры с огромными системами внутри. Задача — добавить новый режим.
Но просто взять и начать писать было невозможно:
▫️ Режимом управлял один класс на 2000 строк. Методы вызывали друг друга, промежуточное состояние записывалось в приватные поля.
▫️ Сам класс хоть и был за интерфейсом, но оставался неразрывно связан с другими частями системы.
Сеть, при изменении состояния, двигала игру дальше — и механизм требовал четкого порядка вызовов.
Потому сеть сама сортировала события, которые отдавала, чтобы логика работала правильно.
Это как раз пример content и control coupling'ов:
▫️Content coupling — один модуль напрямую обращается к внутренним данным другого или модифицирует их
▫️Control coupling — один модуль передает другому управляющую информацию (флаг, параметр), определяя что тот должен делать
И прежде чем добавлять что-то новое — нужно снизить сложность старого.
Противовес локальной и глобальной сложности — модульность.
Снижение сложности без увеличения количества багов — суть рефакторинга.
ДОКУМЕНТЫ НИКТО НЕ ЧИТАЕТ 😭
За всё время удалось поработать на проектах с разным уровнем документации. От полного её отсутствия до удушающего бесполезного объёма.
И каждый раз, приходя на новый проект, задаёшься вопросом:
Какой объём минимально эффективен, чтобы давать максимальную пользу?
Cтарые GDD-файлы
Задачи
Доски в Figma/Miro
Ссылки на репозитории
|— Фича / система / модуль / домен
|— Продуктовые требования — метрики, бизнес, влияние на аудиторию, сроки, список фичей
|— GDD — описание фичей от дизайнеров
|— Техническая документация:
|— Архитектура: C4 system, container, sequence diagram, ADR
|— Требования: из чего должны состоять container'ы и component'ы
|— How to: короткие Guide'ы как быстро решить проблему
|— Исследования: результаты поиска решений, используются для обоснования
UNITEXT: OPENSOURCE СНОВА ЛУЧШЕ РЕШЕНИЙ ОТ UNITY
TextMeshPro — это покупка 2017 года, которую Unity встроила и с тех пор поддерживала на плаву, исправляя баги.
Я не гуру нюансов отрисовки текста, но я никогда и не задумывался что TMP, по стандарту Unicode, не способен отобразить все многообразие символов правильно 😱
Я решил разобраться подробнее в различиях и фичах, чтобы понять в чем инновационность UniText.
🔸Эмодзи
Чтобы показать эмодзи в TMP, тебе нужно: создать текстурный атлас со спрайтами, импортировать его, разметить каждый спрайт, привязать к компоненту.
И всё равно ты получишь статичную картинку без поддержки Zero Width Joiner (семьи, флаги, тона кожи).
В UniText ты просто пишешь "Привет! 👋🏽" — и оно работает. Эмодзи берутся нативно с каждой платформы: Segoe на Windows, Apple Color Emoji на iOS, NotoColorEmoji на Android/Linux.
Мне смешно об этом писать, но теперь emoji просто есть и не нужно костылить fallback шрифт в новых версиях и свой атлас emoji в старых версиях TMP.
🔸RTL и смешанный текст
Арабский, иврит, урду, фарси — ни одно решение в Unity не реализует Bidirectional алгоритм по спецификации Unicode.
Костыль вроде RTLTMPro покрывает базовый кейс, но ломается на смешанном тексте — когда в одной строке арабский и английский.
Правильное отображение смешанного текста — это не просто "перевернуть строку".
В Unicode разработали для этого целую спецификацию UAX #9 с 861 тысячей тестов.
Каждый тест — конкретная комбинация символов разных направлений и ожидаемый порядок отображения.
Проходит все тесты — текст корректен в любой комбинации языков.
UniText проходит их все:
▫️ Bidirectional (направление текста)
▫️ Line Breaking (где можно переносить строку)
▫️ Grapheme Clusters (что считать одним "символом" — важно для эмодзи и составных букв)
TMP ничего из этого не проходит на 100% 🫠
Т.е. нет гарантий что чат в вашей игре будет правильно показывать что пользователь написал.
🔸Шрифты без боли
1⃣ TMP растеризует глифы оффлайн в редакторе и сериализует атласы на диск.
Отсюда грязные файлы в git, конфликты при мёрже, раздутый билд.
UniText растеризует глифы в runtime — атласы не сериализуются, в проекте хранятся только байты шрифтов (UniTextFont.cs).
Никаких грязных файлов, никаких конфликтов.
Кто вдруг не понял:
В UniText не нужно постоянно отменять изменения в папке как Text Mesh Pro 🤯
ПРОЕКТИРОВАНИЕ: КОМПОНЕНТЫ
Слово "компонент" — одно из самых перегруженных в разработке. В Unity это MonoBehaviour, в ECS — struct с данными, в пакетном менеджере — package.
В модели C4 — совершенно другое.
Много раз видел как разработчики рисуют схемы, добавляя на одну диаграмму и крупные подсистемы (UI, Networking, Analytics), и конкретные классы внутри них.
Всё на одном листе, без разделения по масштабу.
Результат — схема, которую понимает только автор.
И вот в чём причина. Между уровнем контейнеров ("что мы деплоим") и уровнем кода ("какие классы пишем") — пропасть.
Контейнеры слишком крупные чтобы по ним начинать имплементацию. Классы слишком мелкие чтобы по ним планировать.
Без промежуточного уровня разработчик вынужден мешать оба на одной схеме. Отсюда каша.
🔸Что такое компонент в C4
Компонент в модели C4 — это группа связанной функциональности за чётким интерфейсом (API, модель, фасад). Не один класс, не файл — а логическая единица (чаще папка), выделенная из кода по ответственности.
Компонент:
▫️ Живёт внутри контейнера
▫️ НЕ деплоится отдельно — деплоится контейнер
▫️ Все компоненты одного контейнера выполняются в одном процессе
В Unity-проекте ближайшая аналогия — внутренняя структура asmdef: из каких подсистем она состоит.
Но маппинг не 1:1 — один компонент может быть размазан по нескольким asmdef, а одна asmdef может содержать несколько компонентов.
❗️ Уровень компонентов и Unity-компоненты (MonoBehaviour/IComponentData) — абсолютно разные, не связанные понятия.
🔸Пример: Unity-клиент
В статье про контейнеры мы установили — Unity-клиент это монолит, 1 деплоемый unit. Но внутри этого монолита есть структура.
В типичном проекте есть инфраструктурный слой, который очевиден:
— UI, Networking, Assets, Analytics, Save
Но ценность уровня компонентов проявляется в декомпозиции игровой логики. Именно тут начинаются вопросы:
▫️ Battle System — боевая механика, расчёт урона, управление раундами
▫️ Meta Game — прогрессия, апгрейды, разблокировки
▫️ Social — кланы, чат, друзья, лидерборды
▫️ Economy — валюты, магазин, инвентарь, покупки
Каждый — группа систем и их фасадов (моделей), которые предоставляют API внешним системам.
На уровне компонентов нам не важно что внутри. Важно что он делает и с чем связан.
🔸Когда это нужно, а когда нет
Сайт C4 прямо говорит:
component diagram — not recommended by default.
АРХИТЕКТУРА БЛОГА
Чем дольше ты в разработке, тем отчётливее чувствуешь — уровень материала в интернете не растёт вместе с тобой. "Рекомендации", "лайфхаки", "советы" по C# и Unity — это цикл самодублирующейся информации, который просто ходит по кругу.
И что ещё хуже — почти всё что можно найти публично, плохо проверяется авторами или намеренно искажается. Приходится постоянно перепроверять.
Я Лёша. 11 лет в Unity, 7 из них коммерческих. Самоучка без наставников — всё из книг, научных статей и анализа реального опыта. Вот не многие из проектов, где довелось работать:
▫️ Hero Wars: Alliance
▫️ WSOP
▫️ Cut The Rope: Daily
▫️ Combat Quest
▫️ А так же делал свою игровую студию Silverfox Games (вся история в статьях: раз, два, три)
Сейчас на вольных хлебах, полностью сосредоточен на блоге и подготовке онлайн-версии курса по архитектуре.
🔸Зачем этот блог
Мне захотелось создать место, где подача материала сконцентрирована на проверяемости источников и высоком качестве. С фокусом на разработчиков, кто уже несколько лет создаёт и работает проекты на Unity.
Не пересказ документации и "10 советов для новичка". А выстроенная цепочка, где каждая статья — один маленький пазл в общую картину мира разработки.
Прежде чем раскрыть объёмную тему, я стараюсь выровнять кривые обучаемости между мной и читателем. Чтобы итоговый материал не казался придумкой автора, а лаконично являлся следствием из ранее прочитанного.
🔸Что почитать
Чтобы лучше понять о чем я пишу и в каком стиле, я постарался собрать все статьи в один список и разбил их по категориям.
Чем ниже статья в списке, тем лучше она раскроется, если вы прочитали предыдущие статьи 🥄
🔹Фундамент — почему всё устроено так, как устроено
▫️ Мы инженеры, не художники
▫️ Второй закон инженерной разработки
▫️ Когнитивная сложность ч.1 и ч.2
▫️ Невыразительность
▫️ Продуктивность
▫️ Проклятие знаний
▫️ Полиморфизм системы
▫️ Инкапсуляция
▫️ Причина и следствие
🔹Архитектура — от определения к проектированию
▫️ (А|a)рхитектура
▫️ Когда задумываться об архитектуре
▫️ Проектирование: система
▫️ Проектирование: контейнеры
▫️ Причина провала проектов
▫️ Требования
🔹Практика — код и инструменты
▫️ SOLID и KISS, DRY, YAGNY — критика
▫️ DI
▫️ Точка входа и инициализация
▫️ Конфиги ч.1 и ч.2
▫️ Порты и адаптеры
▫️ Кодогенерация
▫️ MV*
🔹Под капотом Unity
▫️ UnityEngine.Object == null
▫️ Reverse Engineering
▫️ Качаем файлы быстрее и HTTP/2
▫️ CoreCLR: основы, CoreCLR vs Mono, CoreCLR vs IL2CPP
🔸Видео на YouTube
▫️ Архитектура конфигов
▫️ Многослойная архитектура
▫️ Dzmitry Bazyleu: Архитектура Open Source Проектов
▫️ Ярослав Шабанец: Клиентская архитектура корпораций
🔸Open Source
▫️ Unity Empty Project Template — шаблон пустого Unity проекта с готовой структурой папок
▫️ FastMigrations.Json.Net — миграция json файлов, в 5-7 раз быстрее аналога
🔻 Этот блог — не набор случайных статей. Это выстроенная цепочка причин и следствий. Регулярно читая статьи — ты получаешь полную картину, основанную не на чьих-то мнениях, а на проверяемых источниках и реальном опыте.
Спасибо большое что читаете 😊
Подготовка постов иногда занимает до 1 недели в проработке и проверке — стараюсь чтобы каждая статья экономила время и приносила пользу.
Потому пишу не так регулярно, когда есть силы и вдохновение.
Мне жаль что за время ведения #курс@Uniarchitect, за полгода было всего пара статей.
Из-за этого только у 18% читателей включены уведомления 🔔
Я пишу не часто, но если не хочешь пропускать — включи пожалуйста.
Так точно ничего не потеряется в ленте 🫡
Ставь 👍 если тебе заходит такой подход!
@UniArchitect
ASSET BUNDLES ПО КИРПИЧИКАМ
С Октября 2024 по Июль 2025 я вёл курс по архитектуре. 1-2 раза в неделю, по полтора-два часа. 40 человек. Перед этим полгода собирал и прорабатывал материал.
Во время ведения курса я пообещал ребятам дополнительное занятие — глубокое погружение во внутреннее устройство Unity.
Не "как пользоваться API", а как оно работает изнутри, на уровне исходников.
Первым таким занятием стала система компиляции: Bee, Tundra, Domain Reload. Где не просто разобрал теорию — написал программу, которая компилирует скрипты без самой Unity 🛞
Занятие было записано и выложено в закрытую группу вместе со всеми материалами: исходники, текстовые разборы — всё, что было нарыто в процессе подготовки. Всегда под рукой, чтобы в любой момент вернуться и вспомнить детали.
Меня очень удивило и порадовало что 10 человек из группы попросили провести ещё одно такое занятие.
Тему выбрали сами: Asset Bundles.
Я подумал:
Вдруг кому-то ещё в блоге будет интересно разобраться в том, как на самом деле устроен этот механизм?
ПРИЧИНА ПРОВАЛА ПРОЕКТОВ
В Magic Battle Arena мы с партнером привлекли pre-seed раунд с runway на 1 год 2 месяца.
Я уже рассказывал об этом: раз, два, три
Думали — хватит. Рассчитывали 8 месяцев на MVP, 4 месяца на итерации.
По факту 4 месяцев хватило только начать улучшать метрики. Нужно было runway минимум в 2 раза больше.
Неверная оценка сроков стала краеугольной ошибкой, которая привела к закрытию компании.
А вот смотрите что говорит наука.
🔸Исследование 2019 года: качество кода не при чем
В 2019 году исследователи проанализировали 2171 публикацию с 1990 по 2017 год по теме провала ПО. Из них отобрали 68 наиболее релевантных и тщательно изучили.
Задача: выявить и ранжировать факторы провала IT проектов.
Как думаете, насколько техническое качество кода оказалось важным? 🤓
Insignificant — ничтожно малым. Из 13 выявленных факторов technology illiteracy попала в самый низ.
А вот главный фактор:
▫️ Wrong estimation of time and cost — неверная оценка времени и стоимости
▫️ 43 из 68 исследований указали на это как основную причину провала
🔸Другое исследование: откуда берется неверная оценка?
Исследователи из Aalto University в 2014 году провели анализ корневых причин 4 случаев провала в продуктовых компаниях. Для каждого кейса строили диаграмму причинно-следственных связей — от 130 до 185 причин.
Три основные связи повторялись в 3 из 4 кейсов:
▫️ Weak Task Backlog — расплывчатые требования, неверные приоритеты
▫️ Lack of Cooperation — между отделами теряется информация, нужная для реализации и тестирования
▫️ Lack of Software Testing Resources — менеджмент недовыделяет ресурсы на тестирование
И две из трех цепочек как раз проходят через Sales & Requirements.
▫️Расплывчатые спецификации → слабый backlog → неверные приоритеты.
▫️Недостаток коммуникации → потеря информации → разработчики и тестировщики не понимают что делать.
Требования — точка, где теряется критическая информация.
🔹На Combat Quest я это ощутил на себе.
Настраивал процессы с нуля. В GD-документах постоянно пропускали краевые случаи — альтернативные сценарии использования, граничные случаи, обработку ошибок.
Результат: расширение сроков, переработки, выгорание команды 😵
Код был нормальный. Проблема была в том, что мы не прогоняли сценарии использования.
▪️Тут окно нужно добавить — плюс 10 дней.
▪️Там забыли что игра делает мягкую перезагрузку при исключении.
▪️Не учли что игрок в метро и запрос обрабатывается с задержкой.
▪️Где-то просто не прописали полный список фичей и срочно добивали потом.
Именно 👆 поток нескончаемых доработок, на моем опыте, в итоге постоянно двигал deadline'ы.
🔸Сначала требования, потом диаграммы
В комментариях к статьям про проектирование правильно подмечали — первыми идут требования.
Исследования это подтверждают — 43 из 68 указали на размытые требования как корень неверной оценки.
Посмотрите на картинку из поста с определением архитектуры — именно видение заказчиков (= требования) формирует описание архитектуры и финальную систему.
Модель C4 — система и контейнеры — помогает зафиксировать требования визуально.
Показать заинтересованным сторонам что будет построено, какие элементы задействованы, как они связаны.
Но диаграмма без требований — просто картинка.
🔻 Потому оч важно выработать привычку:
При чтении документов прокручивать варианты, когда что-то идет не по плану. Проговаривать их с командой и закладывать буфер при оценке.Ну или прогонять сценарии через GPT — ТОП вариант 😅
UNITY BUILD PIPELINE ПО КИРПИЧИКАМ
Полгода назад я решил попробовать активность в блоге, где я сначала долго и кропотливо собираю информацию по какой-то технической теме, а после этого рассказываю ее в онлайн формате.
В прошлый раз мы разбирали детали устройства Asset Bundles, где от участников я получил максимально положительные отзывы:
Самый большой вау-эффект был именно от осознания того, что работа с любыми ассетами в Unity устроена похожим образом и AssetBundle не исключение а дополнение для этого. Плюс само по себе разбор формата файлов раскрывает уйму возможностей: можно писать свои патчеры или шифраторы/дешифраторы.
обновил класс -> запустил скрипт -> билд делается на заднем фоне не блокируя работу в редакторе
AI КАК РЕДАКТОР, А НЕ АВТОР
Это вторая статья из серии про AI. Первая тут.
Когда я запускал блог, одной из самых неприятных задач было не “придумать тему”.
Тем обычно много. Сложнее было разложить мысль компактно, без каши в предложениях, и так, чтобы опытному читателю не хотелось закрыть пост на третьей строке со словами “господи, что я читаю” 😅
И первое место, где AI меня реально вытащил — это не код. Это текст.
🔸Блог
Почти каждая статья проходила через ChatGPT:
— проверить стилистику
— поправить грамматику
— найти кривые формулировки
— предложить другой способ сказать ту же мысль
И вот последнее оказалось важнее, чем кажется. Потому что иногда мысль вроде нормальная, но звучит так, будто её три раза уронили по дороге.
У каждого автора есть набор любимых речевых конструкций. Одни и те же связки, одни и те же обороты, один и тот же способ подводить к выводу.
С одной стороны — это стиль. С другой — если не обновлять этот пул, текст начинает звучать как пережёванная версия самого себя.
У меня это особенно заметно, потому что я довольно быстро нахожу первичную формулировку мысли, но намного хуже умею посмотреть на неё под другим углом.
Я уже писал про это в статье Проклятие знаний: когда мысль у тебя в голове собрана, очень легко забыть, что то, что очевидно для тебя может быть не очевидно для читателя.
🔹Курс
Вторая большая область — подготовка курса.
Первые 3 месяца я собирал материал руками. Ночью, когда жена уходила спать, я садился за комп, шёл в Google, читал научные статьи, разбирался, что там вообще написано, и складывал всё в Notion.
Не просто “ссылка на источник”, а:
— какая мысль откуда взята
— где её нужно использовать
— в каком порядке она должна идти
— что нельзя исказить при пересказе
Так была сделана почти половина курса.
А потом появились reasoning-модели, которым можно скормить большой промпт, файлы и дать 40 минут подумать.
И здесь AI стал не автором, а независимым валидатором: правильно ли я понял источник, не перепутал ли причинность, не натянул ли вывод на свою картину мира, потому что очень хочется, выдать желаемое за действительное 😅
Вот это оказалось прям ценно.
Потому что найти источник — не самая сложная часть. Сложная часть — прочитать, правильно понять, а потом донести мысль так, чтобы не исказить исходный смысл.
🔸И это хорошо ложится на исследования
В SAP/HPI исследовании про опыт разработчиков с GenAI есть важный практический вывод:
когда человек использует один режим работы с AI — только chat или только in-code — нагрузка падает. Когда начинает метаться между режимами, выигрыш пропадает.
когда человек полностью отдаёт задачу AI, у него растёт ощущение продуктивности, но проседает понимание, чтение и отладка — причём без реального выигрыша по скорости. А те, кто работает с AI вовлеченно, спрашивая объяснения, а не готовый ответ, понимание сохраняют.
Запись: архитектура проекта уровня Gardenscapes
На 4 часа вчера засиделся чтобы выдать и показать весь материал что я подготовил 😬
В следующий раз буду значительно сокращать, та же БД и зарисовки вручную я думаю были лишними.
Но мне просто хотелось показать как с диграммами можно удобно работать самому и что это не сложно 😊
Я сам кайфанул, очень много рассказал, почти каждый важный момент прокомментировал и дал прям подробную картину как архитектура таких проектов может выглядеть 🤓
Так что рекомендую посмотреть в записи, на х2 очень даже комфортно 🫡
Ссылка на запись
Спасибо так же за активность в чате, вопросы были крутые, а атмосфера ламповая 🍻
Пишите тут как вам стрим и что нужно ещё улучшить?
Ставь 👍 если тебе по кайфу такая движуха
@UniArchitect
АРХИТЕКТУРА БЛОГА
Чем дольше ты в разработке, тем отчётливее чувствуешь — уровень материала в интернете не растёт вместе с тобой. "Рекомендации", "лайфхаки", "советы" по C# и Unity — это цикл самодублирующейся информации, который просто ходит по кругу.
И что ещё хуже — почти всё что можно найти публично, плохо проверяется авторами или намеренно искажается. Приходится постоянно перепроверять.
Я Лёша. 11 лет в Unity, 7 из них коммерческих. Самоучка без наставников — всё из книг, научных статей и анализа реального опыта. Вот не многие из проектов, где довелось работать:
▫️ Hero Wars: Alliance
▫️ WSOP
▫️ Cut The Rope: Daily
▫️ Combat Quest
▫️ А так же делал свою игровую студию Silverfox Games (вся история в статьях: раз, два, три)
Сейчас на вольных хлебах, полностью сосредоточен на блоге и подготовке онлайн-версии курса по архитектуре.
🔸Зачем этот блог
Мне захотелось создать место, где подача материала сконцентрирована на проверяемости источников и высоком качестве. С фокусом на разработчиков, кто уже несколько лет создаёт и работает проекты на Unity.
Не пересказ документации и "10 советов для новичка". А выстроенная цепочка, где каждая статья — один маленький пазл в общую картину мира разработки.
Прежде чем раскрыть объёмную тему, я стараюсь выровнять кривые обучаемости между мной и читателем. Чтобы итоговый материал не казался придумкой автора, а лаконично являлся следствием из ранее прочитанного.
🔸Что почитать
Чтобы лучше понять о чем я пишу и в каком стиле, я постарался собрать все статьи в один список и разбил их по категориям.
Чем ниже статья в списке, тем лучше она раскроется, если вы прочитали предыдущие статьи 🥄
🔹Фундамент — почему всё устроено так, как устроено
▫️ Мы инженеры, не художники
▫️ Второй закон инженерной разработки
▫️ Когнитивная сложность ч.1 и ч.2
▫️ Невыразительность
▫️ Продуктивность
▫️ Проклятие знаний
▫️ Полиморфизм системы
▫️ Инкапсуляция
▫️ Причина и следствие
🔹Архитектура — от определения к проектированию
▫️ (А|a)рхитектура
▫️ Когда задумываться об архитектуре
▫️ Проектирование: система
▫️ Проектирование: контейнеры
▫️ Причина провала проектов
▫️ Требования
🔹Практика — код и инструменты
▫️ SOLID и KISS, DRY, YAGNY — критика
▫️ DI
▫️ Точка входа и инициализация
▫️ Конфиги ч.1 и ч.2
▫️ Порты и адаптеры
▫️ Кодогенерация
▫️ MV*
🔹Под капотом Unity
▫️ UnityEngine.Object == null
▫️ Reverse Engineering
▫️ Качаем файлы быстрее и HTTP/2
▫️ CoreCLR: основы, CoreCLR vs Mono, CoreCLR vs IL2CPP
🔸Видео на YouTube
▫️ Архитектура конфигов
▫️ Многослойная архитектура
▫️ Dzmitry Bazyleu: Архитектура Open Source Проектов
▫️ Ярослав Шабанец: Клиентская архитектура корпораций
🔸Open Source
▫️ Unity Empty Project Template — шаблон пустого Unity проекта с готовой структурой папок
▫️ FastMigrations.Json.Net — миграция json файлов, в 5-7 раз быстрее аналога
🔻 Этот блог — не набор случайных статей. Это выстроенная цепочка причин и следствий. Регулярно читая статьи — ты получаешь полную картину, основанную не на чьих-то мнениях, а на проверяемых источниках и реальном опыте.
🔸Ваш последний курс по архитектуре
Мой образовательный продукт, над которым я работал последние 2.5 года:
— 9 месяцев собирал материал
— 11 месяцев вел занятия для middle/senior/lead разработчиков
— 6 месяцев монтировал и загружал на платформу
И все это чтобы:
🔹Полностью закрыть фундамент по архитектуре приложений на Unity.
Сейчас он находится в состоянии soft launch, но если хочется узнать подробнее, кликай по кнопке ниже, забирай полезный материал со ссылкой на сайт, где ты сможешь узнать подробнее.
Спасибо большое что читаете 😊
Ставь 👍 если тебе заходит такой подход!
@UniArchitect
ПОЖАЛУЙ, САМЫЙ ВАЖНЫЙ РЕЛИЗ В ИСТОРИИ КАНАЛА
2.5 года:
🔸9 месяцев на сбор, вычитку, отбор и структуризацию
🔸11 месяцев на подачу
🔸 5 месяцев отдыха (почти выгорел)
🔸 4 месяца монтажа, улучшение бота, создание сайта и платформы
В следующий раз когда решите что сделать свой курс это легко, перечитайте список выше 🤣
Но как итог:
🔹40 участников первого потока
🔹44 лекции и 20 ответов на вопросы
🔹~85 часов материала
🔹Более 50 научных источников в основе
🔹Средняя оценка 9.5/10
Я по настоящему вложил все силы и душу в то, чтобы в мире AI-слопа, короткого и простого контента сделать то, что действительно дает знания 🥰
Чтобы убедиться в этом, я:
🔸После каждого занятия создавал опрос с оценкой от 1 до 5
🔸Если оценка была не 5, я шел в личку к каждому ученику и спрашивал что нужно улучшить
🔸Прислушивался к каждому мнению и вносил изменения
Потому с уверенностью могу заверить, материал обкатан и проверен на разработчиках:
🔹Middle+ уровня
🔹Часть из них не работают с Unity (работают в других сферах)
🔹Часть из них инди
🔹50% из них работают на проектах с 1М+ скачиваний
🔹Средний коммерческий опыт 4-8 лет
По итогу которого получилися замечательный образовательный продукт "Ваш последний курс по архитектуре" 😊
Который доступен на удобной онлайн платформе:
🔸Смотри в любое время на любом устройстве (через браузер или приложение)
🔸Хост в РФ без проблем с доступом (вне РФ тоже)
🔸Плати как тебе удобно (рассрочки, карты РФ, не-РФ, а так же счета для компаний)
Чуть более подробную историю я расскажу на стримах, которые планирую проводить раз в 2-3 недели. Анонс уже скоро 🛞
А пока, переходите в бота, там я оставил для вас полезную методичку с архитектурными решениями, которые важно принять при старте нового проекта.
Там же вы получите детали истории о курсе и ссылку на сайт.
Для тех кто давно ждал онлайн-релиза, промокод EARLYBIRD со скидкой 20%.
Просто введи его на странице оплаты.
Осталось всего 15 использований, не затягивай.
Ты знаешь кому переслать этот пост 💪
Ставь 👍, если тебе заходит такая движуха!
#курс@UniArchitect
CROSS-CUTTING CONCERNS
Чем больше проект, тем заметнее одна вещь:
В зрелых production проектах очень много обслуживающего кода.
Aspects tend not to be units of the system's functional decomposition, but rather to be properties that affect the performance or semantics of the components in systemic ways.
Video game programming is an area where code duplication is extremely prevalent.
Similar types of tasks are performed in multiple places throughout a game engine codebase.
For example: game balance, logging, and memory allocation are just a few of the areas which are located across disparate locations of the codebase.
PostAKEvent.
ЧЕРНОВИК: перестать писать душные статьи и начать постить мемы 😅
Читать полностью…
НЕ ТЕРЯЕМ .META ФАЙЛЫ
Часто, особенно ребята, которые начинают или мало работают с Unity и Git, получают замечания:
"Ты тут .meta файл забыл закоммитить. Из-за этого ссылки на объект в других компонентах потерялись."
И это раздражающая проблема:
1️⃣ Её можно обнаружить только в runtime. Т.е. пока код, который использует объект с потерянным .meta, не будет вызван — в консоли тишина. Никаких ошибок, никаких предупреждений.
2️⃣ "А у меня локально всё работает" — самая раздражающая фраза, которую только можно услышать. Полное снятие с себя ответственности и перекладывание проблемы на другого.
Благо, есть решение.
🔸unity-git-hooks
unity-git-hooks — 3 простых .sh скрипта, которые копируются в .git/hooks и автоматически следят за консистентностью .meta файлов.
Установка — копируешь pre-commit, post-checkout и post-merge из репозитория в .git/hooks своего проекта. Если хуки уже есть — дописываешь содержимое в конец.
По умолчанию скрипты считают, что папка Assets лежит в корне репозитория. Если структура другая — указываешь путь через git config unity3d.assets-dir client/Assets.
🔸pre-commit — валидация перед коммитом
Самый важный. Срабатывает при git commit и блокирует его, если .meta и ассеты рассинхронизированы.
При добавлении файлов:
— Добавляется .meta, но ассета нет в индексе — ошибка "Redundant meta file"
— Добавляется ассет, но нет .meta для него или для родительских директорий — ошибка "Missing meta file" с подсказкой git add
При удалении файлов:
▫️Удаляется .meta, но ассет остаётся — ошибка. Нельзя удалить .meta и оставить ассет
▫️Удаляется ассет, а .meta осиротевшей директории остаётся в индексе — ошибка с подсказкой git rm
Скрипт проходит вверх по всем родительским директориям до Assets и проверяет каждый уровень.
Т.е. гарантирует простое правило: каждый ассет имеет свой .meta, каждый .meta имеет свой ассет. Ни больше, ни меньше.
🔸post-checkout и post-merge — очистка мусора
Оба делают одно и то же — удаляют пустые директории внутри Assets.
Зачем? Git не отслеживает директории — только файлы.
Когда ты переключаешь ветку или делаешь pull, git удаляет файлы из папки, но сама пустая директория остаётся на диске.
Unity видит эту пустую папку, генерирует для неё .meta файл — и вот у тебя уже грязный git status сразу после checkout. Два хука решают это автоматически.
🔻Одно простое решение на проекте — и на всём протяжении разработки экономишь кучу времени лида и разработчиков на решении багов с потерянными ссылками.
Поставь эти скрипты своим художникам и дизайнерам — уверен, работать станет проще. Только не забудь написать короткий How-to, чтобы потом не отвечать на "А почему мне git выдаёт ошибку?" 😵
Ставь 👍 если тебе заходит такого рода контент!
Ты знаешь кому переслать эту статью 💪
#решения@UniArchitect
ПОМОЙКА В MENUITEM
Из проекта в проект прихожу и вижу одну и ту же картину.
Есть маленькие полезные скрипты, которые упрощают работу, но все они запрятаны в глубине проекта.
О чем речь:
— Открыть Persistent Data Path в проводнике
— Переключить сцену, чтобы не искать её в иерархии
— Удалить закешированные данные
— Переключить редактор из dev в prod или qa
И прочие мелочи, которые нужно часто вызывать в редакторе.
Обычно для этого создаётся скрипт с атрибутом [MenuItem("Tools/...")].
🔸Проблема
Почему-то этот полезный код очень любят разбрасывать по скриптам, папкам, сборкам.
Сторонние плагины туда же — Odin, DoTween и прочие имеют свои секции в Tools.
Поиск нужной кнопки начинает отнимать время.
Помножь на количество рабочих дней — получишь кучу времени потраченного на поиск.
При этом не все команды пишут логи, и найти откуда именно этот код вызывается — бесящий процесс.
В момент поиска не делается ничего полезного, ты просто ищешь ответ на вопрос "где это лежит".
Мелочь, но дико бесит 😵
🔸Решение
Всего 3 пункта:
1️⃣ Далем Editor asmdef в проекте: GenshinImpact.Editor
2️⃣ Все пути кладутся в 1 файл с константами, который лежит в корне:
public static class ToolConstants {
public const string Root = "Silverfox";
public static class Build {
public const string Prod = Root + "/Build/Prod";
}
}[MenuItem("Silverfox/Clean local data")][MenuItem(ToolConstants.Build.Prod)]Silverfox" — и ты сразу в файле со всеми tool'зами
ADR: ФИКСАЦИЯ АРХИТЕКТУРНЫХ РЕШЕНИЙ
Достаточно часто находил у себя и видел у других огромное желание, при присоединении к новому проекту, предложить улучшение или постараться исправить уже имеющуюся систему.
Это нормально, мы понимаем и видим как можно сделать лучше, наш глаз не замылен и мы стремимся поскорее с головой ворваться в новый проект.
Вот только один момент мы не учиваем: "А почему это сделано именно так и почему это никто не спешит исправить?".
Можно, конечно, все объяснить простым конформизмом и ленью, но чаще всего мы упускаем одну простую мысль.
Когда-то уже кто-то взял ответственность и принял решение.
Не принимать решение - это тоже решение.
▫️ Status — proposed, accepted, deprecated, superseded
▫️ Context — какая ситуация и ограничения привели к решению
▫️ Decision — что именно решили
▫️ Consequences — что из этого следует, включая негативные эффекты
Status: accepted.
Context: нужен кроссплатформенный HTTP на iOS/Android/WebGL.
Decision: используем BestHTTP.
CORECLR АНОНС АЛЬФЫ
Пару дней назад на GDC Unity анонсировала Alpha релиз CoreCLR в Unity.
Странно, но почему-то новость не встретила большого хайпа и бурного обсуждения.
Наверное, потому что это, пока, все еще обещание, а не фактический релиз.
Более того, новость Unity пока опубликовали в виде короткого shorts на youtube.
Для тех, кто вдруг пропустил, я написал 3 подробных поста сравнения основных отличий и преимуществ, что нам даст CoreCLR:
▫️CoreCLR в Unity — это круто
▫️CoreCLR vs Mono
▫️CoreCLR vs IL2CPP
🔸Что мы узнали нового:
1️⃣ Alpha релиз будет в версии 6.8 позже в этом году
Ну, как говорится: "Могу только поставить 🕯 и верить, что в этот раз версия и сроки не будут сдвинуты".
А если серьезно, то назначение конкретного номера версии — это уже коммитмент по срокам.
🔻Мой прогноз:
6.8 точно не LTS, а значит, это tech release. 6.4а и 6.5а (текущие tech release) были выпущены в Октябре-Декабре.
Ожидаю, что 6.8a появится с Сентября по Декабрь 2026.
Время Domain Reload снизится минимум на 75%.
В моём примере — с 12 секунд до 3. Останутся только вызовы Awake/Destroy и десериализация состояния сцен.
Изменение в скрипте
|- Изменения видит редактор
|- Запуск рекомпиляции
|- bee_backend (
|— Чтение DAG файла (ориентированный ацикличного граф, который построила Tundra)
|— Расчёт хэшей
|— Если хэш другой
|— Вызываем msbuild на каждой ноде (по факту asmdef)
|— Domain Reload
ПРОЕКТИРОВАНИЕ: ТРЕБОВАНИЯ
В прошлой статье мы разобрали исследование, где 43 из 68 работ указали на размытые требования как корень неверной оценки сроков.
И пообещал разобрать — что конкретно должно быть в документе, чтобы не влетать в бесконечные доработки.
Давайте на чистоту. Мы не так часто вносим правки в геймдизайн документы.
Получил GDD — сел делать. А потом неделя за неделей всплывают кейсы, которые никто не описал. Вот оно, расширение сроков.
🔸Функциональные требования
По IEEE 1471-2000 (это то самое определение архитектуры ПО по стандарту), у стейкхолдеров есть viewpoint — видение того, как система должна работать. На практике этот viewpoint и есть GDD.
Уже из него программисты должны формировать architectural description (AD) — техническую документацию по сути. В геймдеве AD почти никто не делает, потому все обычно прописывается в GDD (viewpoint).
Хороший GDD содержит:
▫️Функциональное описание механик
▫️Визуальное видение: мокапы, скетчи, референсы
▫️Краевые случаи
▫️Пользовательские истории
🔸User Stories — лучший формат
Пользовательские истории — описание требований с точки зрения пользователя, а не внутренней реализации. Вместо "выдаем награду при окончании боя" — "если бой окончен, то я вижу экран награды".
Почему это работает:
▪️Иерархическая структура "если … то …" один в один ложится в код
▪️QA берет документ и сразу получает список кейсов для проверки
▪️Легко инвертировать: "а что если НЕ?" — и ты находишь пропущенные краевые случаи
Они делятся на два типа:
▫️Happy path — основной поток без ошибок
▫️Alternative path — что происходит когда что-то пошло не так
Пример:
— Happy: если я нажму кнопку "Купить", я увижу подтверждение покупки
— Alt 1: если у меня недостаточно валюты, я увижу предложение пополнить баланс
— Alt 2: если во время покупки пропал интернет, я увижу сообщение об ошибке и мой баланс не изменится
Если в процессе чтения документа или написания кода тебе нужно что-то додумывать — значит этот момент не был учтен в требованиях.
МАШИНА СОСТОЯНИЙ - АДище
Машина состояний — один из самых интуитивно понятных подходов. Нарисовал квадратики, провёл стрелочки, описал условия переходов — готово.
И если для анимаций, поведения противников, состояний предметов и квестов — использование оправдано и обосновано.
То когда состояния начинают просачиваться в глобальное управление — подключениями, сценами, окнами UI — появляется проблема.
Ты не сможешь продумать все возможные события и условия переходов. Рано или поздно это приведёт к зависанию в одном состоянии машины.
Дийкстра рассуждал об этом ещё в 68 году — описывая:
В мультипрограммных системах, где несколько процессов работают параллельно с неопределённым порядком прерываний, возникают часто ошибки невоспроизводимые — зависящие от случайного момента прерывания.
Событие, поступившее конечному автомату в некотором контексте, может не вызвать никакого действия, поскольку автомат не в состоянии однозначно определить, какое именно действие должно быть выполнено, исходя из полученного входного сигнала и текущего состояния машины.🔸Пример 1: Loading
Хочешь делать игры, но не знаешь, как получить инвестиции
По своему опыту скажу, что на старте в геймдеве сложнее всего не собрать первый билд, а понять, как развивать проект, искать команду и выходить с предложением к инвесторам. Идей может быть много, но найти того, кто в них поверит – нетривиальная задача.
Можно попробовать реализовать задуманное самостоятельно, но вероятность успеха будет не слишком высокой. Неплохая альтернатива – нетворкинг, но процесс может растянуться на неопределенный срок. И третий вариант - поучаствовать в акселераторе. Сейчас вот открыли опен-колл на седьмой сезон «Фабрики видеоигр» от Московского кластера видеоигр. Можно подать заявку с идеей игры, прототипом или готовой демо-версией, причем и соло-разработчикам, и небольшим командам, и студиям.
Что внутри акселератора?:
🔸 индивидуальные встречи-консультации с топ-разработчиками и игровыми продюсерами;
🔸 онлайн-программа и доработка прототипа с менторами;
🔸 помощь в упаковке билда и подготовка к встрече с инвесторами.
Финалом станет питчинг, где лучшие проекты получат финансирование на дальнейшую разработку. За время работы «Фабрики» инди-студии привлекли уже свыше 180 млн рублей инвестиций. Многим помогли вывести проекта за пределы локального рынка.
Если хочешь послушать не только мои советы по разработке игр, то заявку можно подать до 13 февраля. Жаль, конечно, что в свое время в сибирской глубинке таких возможностей у меня не было. Много шишек бы не набил.
@UniArchitect #акселератор