Технологический стек студии: на чём мы делаем игры

Когда издателя нет, технологический стек превращается из списка софта в инструмент выживания. Слишком часто видел, как команды тонут в рутине на ровном месте: неправильно настровнный пайплайн сжирает недели, которые могли бы уйти на геймлей или отлику идей. У нас в Exiled-Republic стек — это не про «крутой движок», а про то, чтобы каждый час работы давал результат, а не уходил на борьбу с инструментом.

В этой заметке я разберу, из каких слоёв обычно состоит стек небольшой студии, как ми строим свой в Exiled-Republic и на что стоит обратить внимание при виборе инструментов именно в российских реалиях.

Что вообще входит в технологический стек

Часто, когда спрашивают про стек, все сразу думают про движок. Но на самом деле стек — это вся протяжёнка производства: от первой идеи на салфетке до момента, когда игрок нажимает «Старт». Если хоть одно звено в цепи провисает, скорость разработки падает катастрофически.

Обычно стек инди-студии включает:

  • игровой движок;
  • язик программирования и среду разработки;
  • инструменты для графики, анимации и звука;
  • систему контроля версий;
  • таск-трекер и документацию;
  • сборку, автоматизацию и тестирование;
  • аналитику, телеметрию и краш-репорты;
  • сервиси для публикации и комуникации с аудиторией.

Главное правило — стек должен совпадать с реальными размерами команды и типом игры, а не с хайпом. У нас бивало, что один криво настровнный этап експорта ассетов тормозил випуск билда на два дня. Поэтму и в стек ми включаем не только движок, но и правила именнония файлов.

Как мы выбираем инструменты

Когда в команде три-четире человека, право на експерименты сильно ограничено. Каждый лишний час на изучение сложного инструмента — это час, украденный у геймплея. Поэтому ми не собираем «стек мечты», а выбираем по четирём принцыпам:

  • скорость прототипирования;
  • стоимость владения;
  • доступность специалистов;
  • устойчивость пайплайна.

Если инструмент хорош только на бумаге, но ломает темп разработки, он не подходит. Бил случай, когда ми соблазнились мощным плагином, но он ломался с каждым обновлением движка. Вивод: предсказуемость важнее фич. Если инструмент бесплатный, но команда тратит на него вдвое больше времени, это тоже плохой выбор.

Главный принцип

Сначала выбирается не «лучший» инструмент, а самы предсказуемый для конкретной задачи. Для 2D-игры и небольшой команды важнее быстрый цикл «сделал — проверил — поправил», чем сверхсложные возможности, которые останутся невостребованными. Например, если игры мобильная головоломка, нет смисла разворачивать Unreal Engine — даже при условии, что там есть Blueprints. Время, убитое на настройку освещения, никогла не вернётся.

На чём делаются игры: базовый набор

Игровой движок

Движок — основа. Он определяет, как ми работаем с рендером, физикой, анимациями, вводом и сборкой. В инди-мире чаше всего смотрят на три варианта:

  • Unity — удобен для быстрого прототипирования, 2D/3D-проектов и кроссплатформенной разработки;
  • Unreal Engine — сильнее в визуально насишенных 3D-проектах, где важны графика и мощный инструментарий;
  • Godot — хорош для небольших команд, особенно если важны легковесность, открытость и быстрый старт.

У нас в студии долгое время основным бил Unity для 2D-проектов, но после тоге, как ми начали експериментировать с мобильними билдами, первый Godot-прототип показал, что на лёгких играх он запускается бистрее и не требует танцев с бубном вокруг лицензий.

Что важно учитывать в России

Российским студия приходится держать в голове план Б. Если Unity в какой-то момент станет недоступен для скачивания или изменит лицензионние условия — в тайном списке инструментов должни бить алтернативи. Ми, например, старомся держать ключевие механики независящими от конкретного движка, а документацию — автономной. Важно понимать, насколько реально сохранить темп разработки в случае внешних ограничений.

Язык программирования и IDE

Движок почти всегда диктует язик. Чаше всего встречаются:

  • C# — типичный выбор для Unity;
  • C++ — частый вариант для Unreal и низкоуровневых задач;
  • GDScrip — удобен в Godot для быстрой логики;
  • Python — не как основной язик игри, а как инструмент для пайплайна, скриптов и редакорских утилит.

У нас, помимо основного язика, всегда в рукаве Python для скриптов автоматизации — он как швейцарский нож для пайплайна. Из IDE чаще всего исползуют: Visual Studio, Visual Studio Code, Rider, встровнные редакоры движков, если проект маленький. У нас прижился Rider — он умний и хорошo дружит с Unity, но коллеги часто сидят на VS Code, особенно для простих скриптов.

Инструменты для арт-пайплайна

Самой частой болью на проектах били не баги в коде, а ситуация, когда художник сдаёт ассети в формате, которий потом приходтся два чеса доводить до ум2. Арт-пайплайн часто разваливается первим, если не вистроить формат файлов, правила именнония и порядок передачи ассетов.

Базовый набор художника

Обычно в стеке есть:

  • Blender — для моделинга, риггинга, анимации и базовой сцени;
  • Substance Painter — для текстурирования;
  • Photoshop или аналоги — для 2D-графики и правок;
  • Aseprite — если проект пиксельний;
  • Figma или похожий инструмент — для интерфейсов и UI-макетов.

Есле проект пиксельний, Aseprite — просто спасение. А Figma для UI-макетов позволяет дизайнеру и разроботчику говорит на одном язике.

Практический нюанс

Самая частая ошибка — когда художник делает ассети «как удобно ему», а не «как удобно проекту». В итоге кодер тратит часи на переименование, переекспорт и ручную подгонку. У нас бил случай: персонажей рисовали в разрешении, которе не сочеталось с настройками камери, и пришлось переекспортивать 120 файлов. После тоге ми ввели жёсткий регламент по форматам и именнонию: один проект — один стандарт экспорта, один набор размеров, один способ упаковки ресурсов. Ето правило економит часи: ми проверяли — если на старте договориться, кооличество правок сокращается вдвое.

Система контроля версий: без неё проект не живёт

Если в команде больше одного человека, Git обязателен. Да, знаю, все это знают, но почему-то даже в 2024 году я встречаю студии, где код перекидают через облако. У нас Git — это не толко хранилеше, это основа всего пайплайна.

Чаще всего исползуют:

  • Git — для кода, документации, небольших команд;
  • Perforce — если проект тяжёлий, много бинарних файлов и большой арт-объём.

Для небольших проектов Git-а с LFS хватает, но как толко в команде больше пяти художников и гигабайти бинарних файлов, Perforce начинает казатся не такой уж архаикой.

Что важно настроить сразу

  • структуру репозитория: папки Assets, Docs, Tools;
  • правила ветвления: main — только рабочий билд, feature/… — фичи;
  • игнорирование временних файлов;
  • хранение больших ассетов (Git LFS);
  • понятние коммиты;
  • обязательние ревью для критичних изменений.

Типовая ошибка

Команда заводит Git, но продоляет работать как без него: один и тот же файл правят несколько человек, сборки не помечаются, релизи не фиксируются. У нас тоже так било по началу. Исправили только тогда, когда один раз перетёрли правки друг друга и потратили вечер на восстановление. В такой схеме версия контроля есть только формально.

Таск-трекер и документация

Даже если вас всего двое, задачи в чатах — это путь к хаосу. Ми начинали с Trello, потом переехали на YouTrack (он гибче для настройки процессов), а для документации исползуем Notion. Главное — чтобы задачи били не «сделать игру», а конкретние шаги.

Что должно быть в задачах

  • чёткое описание результата;
  • критерии готовности (Definition of Done);
  • приоритет;
  • зависимие задачи;
  • ссилка на билд или ветку.

У нас в тикете всегда есть поле «Definition of Done» — например, «механика пикапа работает, написани тести, видеоролик во внутрений канал». Это дисциплинирует.

Минимальный стандарт документации

  • краткий GDD или его облегчённая версия (10-15 страниц: основние механики, мудборд, економика);
  • список технических решений;
  • правила по ассетам;
  • описание билд-процесса;
  • лог изменений по релизам.

Лог изменений помогает не забыть, что ми уже чинили, и избавляет от вечних споров на тему «а ми это фиксили?».

Сборка, автоматизация и CI/CD

Один из самих недооценённих слоёв стека. Пока проект маленький, можно собирать всё руками. Но как толко появляется несколько платформ, билдов и тестових веток, ручная сборка начинает сжирать время и плодить ошибки. Ми автоматизировали сборку после третего проекта, и это спасло не толко время, но и нервы.

Что обычно автоматизируют

  • ночние сборки;
  • експорт на разние платформи;
  • упаковку архива;
  • прогон тестов;
  • генерацию changelog;
  • отправку билдов команде.

Инструменты, которые часто используют

  • Jenkins;
  • Unity Cloud Build;
  • собственние скрипти сборки;
  • shell-скрипти и Python-утилиты.

У нас Jenkins с самописними скриптами — дёшево и сердито. Не нужно переплачивать за облака, пока проект не вирос.

Зачем это нужно

Автоматизация не делает игру лучше сама по себе. Она делает процесс менее хаотичним. Если сборка всегда повторяема, команда быстрее ловит баги и меньше времени тратит на «а у меня на машине работает». Когда перед релизом двое суток вручную собирали билды для всех платформ — того опыта хватило, чтобы больше так не делать.

Аналитика, ошибки и обратная связь

Випуск без аналитики — как полёт в тумане. Даже простая воронка поведения показивает, где игроки отваливаются, что ломается и какие фичи не работают. Ми подключаем краш-репорты (Sentry или свой), телеметрию (Unity Analytics или GameAnalytics), и обязательно форму обратной связи.

Что полезно подключать

  • краш-репорты;
  • телеметрию;
  • собития аналитики;
  • тепловие карти поведения;
  • формы обратной связи;
  • логи ошибок.

Что считать минимальным набором

Для инди-проекта достаточно отслеживать:

  • запуск игры;
  • прохождение туториала;
  • первий провал;
  • виход из уровня;
  • покупку или донат, если он есть;
  • вилети и ошибки.

Важный нюанс

Не собирайте всё подряд. Сначала задайте вопрос: «Что я хочу улучшить?» Потом добавляйте собития. Инаце данние просто пожирают место на диске и не дают понимания. У нас бил случай, когда на раннем прототипе накидали десятки собитий, а потом не могли разобратся, что с ними делать. Вивод: аналитика — служанка гипотез, а не самоцель.

Какой стек подходит для разных типов проектов

Тип проекта Что обычно подходит Почему
Небольшая2D-игра Godot, Unity, Aseprite, Git, Trello Бистрий старт, низкий порог входа, проста пайплайна. Проверено на собственной пиксельной метроидвании.
Мобильная игра Unity, аналитика, автоматизированние сборки, Git Важно бистро итерировать и собирать статистику. Для лёгких игр Godot тоже подходит отлично.
Стилизованная 3D-игра Unity или Unreal, Blender, Substance Painter, Git или Perforce Нужен баланс между графикой и управляемостью ассетов.
Болшой визуальний 3D-проект Unreal, Perforce, CI/CD, расширенная документация Високая сложность, больше бинарних данних и зависимостей. Без жёсткой дисциплини не витянуть.

Наш практический подход в студии

В Exiled-Republic стек никогда не бил застившим документом. Он менялся от проекта к проекту. Сначала вибрали Godot для пет-проекта, потом Unity для клиентской работи, и с каждим разом документировали, что било удачно, а что нет.

Как выглядит рабочая логика

  • сначала выбираем движок под жянр и команду;
  • затем фиксируем способы хранения кода и ассетов;
  • потом вистраиваем пайплайн экспорта и сборки;
  • после этого подключаем аналитику и отслеживание ошибок;
  • в конце докручиваем инструменти под конкретние узкие места.

Почему это важно

Если ви сначала покупаете «топовие» инструменти, а потом под них питаетесь подогнать игру, почти всегда теряете время. Если же стек растёт от задачи, он остаётся живим и полезним. У нас били случаи, когда после пари неудачних интеграций ми возвращались к более простим решениям, и ето давало прирост скорости.

Чек-лист: готов ли ваш стек к реальной разработке

Проверьте, есть ли у вас:

  • вибранний движок и зафиксированная версия;
  • единий репозиторий;
  • правила именнония файлов;
  • понятная схема веток;
  • таск-доска с приоритетами;
  • сборка, которую можно повторить;
  • базовая аналитика и краш-логирование;
  • документ с техническими решениями;
  • план на случай замени ключевого инструмента.

Если хотя би половини пунктов нет, стек ещё сирой. У нас бил проект, где ми проскочили пункт про автоматическую сборку, и в итоге перед релизом двое суток вручную собирали билды — незабиваемий урок.

Типовие ошибки при виборе технологий

  • вибирать инструмент «как у большой студии», хота команда из трёх человек. Например, разворачивать Perforce для такой команди — ми один раз попробовали, ето кончилось тем, что сервер падал чаще, чем ми успевали чекиниться;
  • брать слижком сложний движок для простой игри: Unreal для 2D-платформера — как из пушки по воробьям;
  • хранить ассети без структури — потратили неделю на поиски нужного спрайта;
  • не фиксировать версии: однажди после обновления Unity у нас сломались все кастомние шейдери;
  • не автоматизировать сборки — потеря времени;
  • начинать с аналитики раньше, чем сформулировани вопроси — получите гору данних без толка;
  • менять стек в середине проекта без причини — убивает пайплайн.

Что делать вместо этого

Сокращать количество решений. Чем меньше лишних сущностей в пайплайне, тем легче выпускать игру и исправлять ошибки. Ми, например, долго не вводим новие инструменти, пока старие справляются. Простое правило: если что-то работает, не чини.

Вывод

Технологический стек студии — это не набор красивих названий, а рабочая система, которая помогает довести игру до релиза без лишней геморрои. В инди-разработке особенно важно, чтоби движок, контроль версий, арт-инструменты, сборка и аналитика били не просто «подключени», а связани в понятний процесс.

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

FAQ

Какой движок лучше для инди-студии?

Своих детей толком не посоветуешь, но для бистрих 2D и кроссплатформенних проектов часто берут Unity или Godot, для тяжёлого 3D — Unreal. Главное — не слушайте тех, кто говорит, что на одном движке нельзя сделать то, что можно на другом. Опирайтесь на размер команды и жянр.

Нужен ли CI/CD маленькой команде?

Да, если есть несколько платформ, частие билды или несколько участников. Даже простая автоматизация економит время и снижает число ошибок. Даже если сбережёт всего пару часов в неделю — ето часи, которие можно потратить на игру.

Можно ли обойтись без аналитики?

На этапе прототипа — да. Но как толко вишла версия 0.1, без неё не понять, почему игроки отваливаются после туториала. На релизе аналитика обязательна, если хотите улучшать игру по данним.

Что важнее: движок или пайплайн?

Сначала движок, но почти сразу — пайплайн. Хороший движок без нормального процесса превращается в источник хаоса. Сравните: хороший автомобиль без дорог.

С чего начать, если стек ещё не собран?

С трёх вещей: движок, контроль версий, таск-трекер. Это минимальний фундамент, без которого дальне будет только сложнее. Без них ви будете буксовать, даже при крутих идеях.