Разработка игр

Game Pipeline и CI/CD

Ubisoft выпускает Assassin's Creed на 8 платформах одновременно. Riot Games деплоит патчи к League of Legends каждые две недели без даунтайма для 150M игроков. EA Sports обновляет FIFA Ultimate Team ежедневно. Это невозможно без автоматизированного pipeline: CI/CD, automated testing, analytics-driven balancing. Game development - это software engineering с очень высокими stakes.

  • **Epic Games** использует Horde - собственную CI/CD систему, обрабатывающую тысячи Unreal Engine builds в день для Fortnite, UE5 и сторонних студий
  • **Riot Games Vanguard** (anti-cheat) деплоится через CI с автоматическими regression тестами - ложные срабатывания на честных игроков обнаруживаются до релиза
  • **King (Candy Crush)** использует A/B testing framework для балансировки уровней: сложность уровня меняется для разных сегментов игроков, измеряется completion rate
  • **Supercell** публично рассказывает о data-driven culture: каждое изменение в Clash of Clans проверяется на retention и engagement метриках перед глобальным релизом

Asset Pipeline

**Asset pipeline** трансформирует raw источники (PSD текстуры, FBX модели, WAV аудио) в оптимизированные форматы для каждой платформы. Художник сохранил PSD 4096×4096 → pipeline сжимает в DXT5 для PC, ASTC для iOS, ETC2 для Android с правильным mip chain. Ошибка в pipeline - сломаны все ассеты на платформе.

Addressables Groups в Unity - следующий уровень asset pipeline: ассеты группируются по логике загрузки (Level_01, UI_Common, Characters_Rare). Каждая группа → отдельный AssetBundle. Это позволяет обновлять только изменённые ассеты через CDN без переиздания приложения - критично для mobile games с большими ассет-пакетами.

Художник переименовал текстуру с «tree_bark» на «bark_oak». Prefab перестал загружать текстуру в runtime. Почему?

Build System и автоматизация

**Ручные билды - источник ошибок.** «Работает у меня» разрушает релизы. Автоматизированный build pipeline обеспечивает воспроизводимые сборки с чистого состояния. Unity Cloud Build, Fastlane (iOS/Android), Jenkins/GitHub Actions - стандартный стек. Каждый merge в main → автоматический билд → тесты → distribution.

Unity Build Script (C# Editor script) для headless builds: BuildPipeline.BuildPlayer() с нужными BuildOptions. Важно: устанавливать версию (PlayerSettings.bundleVersion), подписывать iOS билд через provisioning profile, передавать параметры через environment variables (не хардкодить в код). Fastlane match хранит сертификаты в зашифрованном Git репозитории - нет shared Keychain проблем.

CI билд проходит, но на устройстве тестировщика краш при запуске. Локально у разработчика всё работает. Как диагностировать?

Automated Playtesting и QA

**Game testing сложнее software testing:** состояние игры комбинаторно, пользователи делают непредвиденные действия, баги зависят от фреймрейта. Три уровня: Unit Tests (логика без рендеринга), Integration Tests (системы вместе в Play Mode), и Automated Playtesting (AI агент проходит уровни, проверяя навигацию и достижимость).

Unity Simulation (cloud-based) позволяет запускать игровые сессии в параллели: 1000 AI агентов проходят уровень одновременно, собирая данные о death locations, stuck positions, framerate drops. Это называется simulation-based playtesting и используется в больших студиях для баланса и level design validation без участия реальных людей.

Тест проверяет: после смерти игрок respawn'ится за 3 секунды. Тест флакует (иногда pass, иногда fail) в CI. Локально всегда pass. Почему?

Game Analytics и Data Pipeline

**Аналитика - способ слушать миллионы игроков одновременно.** Где игроки умирают чаще всего? На каком уровне отваливается 60% новых игроков? Сколько сессий нужно до первой покупки? Heatmaps смертей покажут, что уровень слишком сложный в конкретной точке. Funnel analysis покажет где теряется retention. Data-driven balancing заменяет dogma.

Death Heatmaps в Fortnite используются для баланса: если 80% игроков умирают в первые 30 секунд после высадки в конкретном регионе карты, Epic Games может добавить больше укрытий или снизить weapon spawns у врагов. Spatial analytics (привязка событий к позиции в мире) требует передавать Vector3 координаты с каждым событием.

Больше аналитических событий - всегда лучше для принятия решений

Избыточная аналитика увеличивает traffic и cost, создаёт шум. Лучше 10-20 ключевых событий, отвечающих на конкретные вопросы, чем 500 событий без цели

Data lake без аналитического вопроса - бесполезное хранилище. Начинать с вопроса ('где игроки бросают', 'что предшествует первой покупке') и добавлять события только под него

Аналитика показывает: Day-1 retention 40%, Day-7 retention 8%. Туториал проходят 85%. Что стоит исследовать в первую очередь?

Ключевые идеи

  • **Asset Pipeline:** source → platform-specific оптимизация (DXT5/ASTC/ETC2); GUID-based ссылки в Unity - переименовывать только через Editor
  • **Build System:** GitHub Actions + GameCI для Unity; Fastlane для iOS/Android signing; headless builds с параметрами через env vars
  • **Playtesting:** Unit + Integration + Automated playtesting (AI агенты); WaitForSeconds vs WaitForSecondsRealtime - причина флакующих тестов
  • **Analytics:** 10-20 ключевых событий под конкретные вопросы; Death Heatmaps, Funnel, Retention - три обязательных dashboard

Связанные темы

Game pipeline объединяет engineering и production процессы:

  • Memory Management в играх — Asset pipeline определяет форматы и размеры ассетов - напрямую влияет на memory budget и streaming стратегию
  • Архитектура AAA движка — AAA студии имеют выделенные teams для tools и pipeline - часть rendering и asset system архитектуры
  • Мобильные игры — Мобильный CI включает thermal soak тесты, App Store/Google Play automated submission и OTA update pipeline

Вопросы для размышления

  • Git LFS хранит бинарные ассеты (текстуры, модели) вне основного репозитория. Альтернатива - Perforce Helix Core, который традиционно используют AAA студии. Какие trade-offs между Git LFS и Perforce для команды из 200 человек с 500GB ассетами?
  • A/B testing в играх этически сложнее, чем в веб-приложениях: одна группа получает более сложный уровень, другая - легче. Это честно? Как major studios (Supercell, King) подходят к ethics of experimentation?
  • Automated playtesting с AI агентами находит navigation bugs и accessibility issues, но не находит 'это скучно' или 'это несправедливо'. Как data analytics дополняет automated testing и human playtesting для holistic quality?

Связанные уроки

  • la-01-vectors-intro
Game Pipeline и CI/CD

0

1

Войти