Just Sandbox

Системный sandbox-шутер • Unity 6 • WebGL / Mobile • 2026

EN RU

Обзор

Just Sandbox — модульный sandbox-шутер, построенный как системный игровой фреймворк. Он фокусируется на эмерджентных взаимодействиях, расширяемости во время выполнения и предсказуемой производительности в условиях ограничений WebGL и мобильных устройств.

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

Реальные ограничения

  • Строгий бюджет кадра: 3–4 мс CPU времени на всю игровую логику для стабильных 60 FPS с учётом накладных расходов WebGL
  • Цель — нулевые аллокации: почти 0 GC-аллокаций во время активного геймплея, чтобы избежать лагов на мобильных устройствах и в браузере
  • Фокус на слабом железе: оптимизация под мобильные браузеры с ограниченной производительностью CPU

Роль и ответственность

  • Полная ответственность от прототипа до лайв-эксплуатации
  • Проектирование модульной архитектуры с жёсткими границами зависимостей
  • Разработка ключевых игровых систем (AI, бой, взаимодействия, прогрессия)
  • Создание data-driven пайплайна для быстрой итерации фич
  • Руководство небольшой инженерной командой (2 разработчика)
  • Поддержка производительности и архитектурной целостности в продакшн-обновлениях

Инженерный подход

  • Event-driven архитектура для межсистемного взаимодействия
  • Жёсткое низкое связывание с изоляцией модулей
  • Оптимизация на основе профилирования (CPU, GC, пики кадра)
  • Асинхронный Addressables streaming pipeline
  • Object pooling для всех боевых и AI-ориентированных систем
  • Детерминированные игровые пайплайны для стабильной симуляции

Ключевые технические проблемы

  • Узкие места пространственных запросов — замена O(N) сканирования сущностей на Physics-based non-alloc запросы
  • GC-спайки в игровом цикле — устранение аллокаций в input, AI и event-системах
  • Нестабильность времени кадра — удаление скрытых аллокаций и стабилизация CPU-пиков в бою

Работа по оптимизации строго опиралась на данные профилирования, а не на предположения, с фокусом на worst-case поведение системы.

Постмортемы (ключевые исправления)

Пространственные запросы и таргетинг AI

Проблема: сильные падения FPS и микрофризы в сценариях с большим количеством ботов.

Причина: устаревшее O(N) сканирование по глобальным коллекциям сущностей, вместе с аллокациями при каждом запросе.

Исправление: миграция на Physics-based запросы с использованием non-alloc OverlapSphere и кешированных буферов.

Результат: устранены GC-спайки в бою и снижено пиковое время скриптов с ~5–6 мс до ~1–2 мс.


Скрытые GC-аллокации в core loop

Проблема: пики кадра при перемещении и вводе камеры в обычном геймплее.

Причина: неявные аллокации в системе событий и boxing value types в input pipeline.

Исправление: переписана event-система с использованием strongly-typed non-alloc delegates и устранён boxing в update-циклах.

Результат: достигнут практически нулевой уровень GC-аллокаций во время активного геймплея.

Дизайн систем

  • Модульный AI-фреймворк с заменяемыми поведениями
  • Централизованный сервис сущностей мира с контролируемым доступом
  • Non-alloc event-система для игровой коммуникации
  • Детерминированный пайплайн боя и урона
  • Addressables-based асинхронная система стриминга

Результаты

  • Стабильные 60 FPS на WebGL и мобильных устройствах
  • Значительное снижение GC-спайков в боевых сценариях
  • ~30–50% ускорение загрузки за счёт оптимизации асинхронного стриминга
  • ~20–40% снижение CPU после профилинг-рефакторинга
  • Улучшение скорости итерации благодаря строгой модульной архитектуре

Масштаб и использование

  • Общее количество запусков: ~35K
  • MAU: ~3.5K
  • Длина сессии: 10–15 минут
  • Платформы: WebGL, mobile

Технологический стек

Unity 6 C# Clean Architecture MVP Zenject Addressables UniTask DOTween

Медиа