Разработка игр
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?