Мы часто видим игры, которые разряжают телефон за полтора часа. При стабильных 60 FPS пользователи всё равно оставляют одно- и двухзвёздочные отзывы — батарея тает на глазах. Потребление энергии — прямой индикатор неэффективного использования CPU и GPU. Оптимизация потребления батареи мобильной игрой — это системная работа: от управления FPS до шейдеров и сетевых запросов. За пять лет мы оптимизировали 15+ проектов, увеличив их время работы на 20–40%. Наши сертифицированные инженеры гарантируют измеримый результат. Свяжитесь с нами для аудита — оценим проект и предложим решение.
Главные источники перерасхода энергии — оптимизация потребления батареи
Неограниченный FPS — самая распространённая ошибка. Application.targetFrameRate = -1 (или без явной установки) означает, что Unity рендерит так быстро, как может. На современных iPhone с ProMotion-дисплеем это 120 FPS в простом меню. Для меню достаточно 30 FPS — оставшиеся 70% CPU/GPU-времени тратятся впустую и греют корпус.
Анимированный фон в главном меню с 500 частицами работает постоянно. Нет паузы при потере фокуса — нет экономии.
Если игра запрашивает Input.location или Input.gyro без необходимости и не отключает — сенсоры опрашиваются постоянно. На Android это несколько мВт дополнительно.
Маленькие HTTP-запросы каждые 5–10 секунд держат радиомодуль активным — один из самых энергоёмких компонентов.
Как определить, что игра тратит лишнее?
Используйте профилирование:
| Инструмент | Что показывает | Норма |
|---|---|---|
| Xcode Energy Organizer | Оценка энергопотребления для iOS | Зелёный уровень |
| Android Vitals Battery | Частота пробуждений в фоне | < 10 раз/час |
adb shell dumpsys batterystats |
Разбивка по компонентам (CPU, GPU, радио) | CPU/GPU < 30% в меню |
Если меню держит CPU/GPU на 70% — это проблема.
Почему управление FPS — первая задача в оптимизации потребления батареи мобильной игрой?
Правильная стратегия — разные таргеты для разных состояний:
// Gameplay: максимальное качество Application.targetFrameRate = 60; // Меню, паузы, диалоги Application.targetFrameRate = 30; // Фоновые вычисления (загрузка, сохранение) Application.targetFrameRate = 15; На iOS нужно также учитывать ProMotion-дисплеи (120 Гц на iPhone 13 Pro+). Явно устанавливайте CADisplayLink.preferredFrameRateRange через Native Plugin для тонкой настройки.
В OnApplicationPause(true) снижайте FPS до минимума или останавливайте рендер полностью.
Как оптимизировать шейдеры для экономии батареи?
На мобильных GPU важна точность вычислений. Использование half-точности вместо float в шейдерах на Adreno и Mali даёт реальную экономию энергии. ALU этих чипов оптимизированы под half-precision. Для большинства эффектов (цвет, UV, освещение) точности half достаточно.
Запечённые лайтмапы вместо динамического освещения снижают нагрузку на фрагментный шейдер в 3–5 раз — это прямое сравнение: запечённые лайтмапы лучше динамического освещения в 3–5 раз по нагрузке на GPU. Сложные фрагментные шейдеры с большим количеством текстурных выборок особенно дороги — каждое tex2D останавливает конвейер.
Сравнение подходов к рендерингу:
| Подход | Относительная нагрузка | Прирост времени работы |
|---|---|---|
| Динамическое освещение | 100% (базовый уровень) | — |
| Запечённые лайтмапы | 20–30% | +20–40% |
| Half-точность везде | 70% | +15% |
Как провести первичную диагностику энергопотребления?
- Установите целевые FPS для каждого состояния (геймплей, меню, пауза).
- Проверьте шейдеры: замените float на half, запеките лайтмапы.
- Настройте батчинг сетевых запросов — буферизуйте и отправляйте пачкой раз в минуту.
- Профилируйте на реальном устройстве с помощью Xcode или adb.
Батчинг сетевых запросов
Вместо отправки событий по одному — батчинг (буферизация и отправка пачкой раз в минуту). Firebase Analytics делает это автоматически. Если используется собственная аналитика через HTTP — явный RequestQueue с таймером.
На Android WorkManager с setRequiresBatteryNotLow(true) откладывает некритичные запросы до момента, когда устройство на зарядке.
Что входит в аудит и оптимизацию?
- Анализ кода и конфигураций проекта.
- Профилирование на реальных устройствах с использованием Xcode Energy Organizer и Android Vitals.
- Настройка FPS по контексту (геймплей, меню, фон).
- Оптимизация шейдеров (перевод на half-точность, запекание лайтмапов).
- Реализация батчинга сетевых запросов.
- Повторное тестирование и предоставление отчёта с метриками.
- Гарантия увеличения времени работы на 20–40%.
Чек-лист типичных ошибок
- Нет ограничения FPS в меню.
- Частицы не останавливаются при паузе.
- Сенсоры опрашиваются постоянно.
- Сетевые запросы по одному без агрегации.
Сроки работ: от 1 до 4 недель в зависимости от объёма кода. Стоимость рассчитывается индивидуально. Получите консультацию по оптимизации батареи уже сегодня.
Проверка результата
iOS: Xcode Energy Organizer + MetricKit. MXCPUMetric и MXGPUMetric в didReceive дают реальные данные о потреблении из отчётов пользователей.
Android: Android Vitals в Play Console → Battery → Excessive wakeups. Если приложение будит устройство чаще 10 раз в час в фоне — это флаг от Google, который влияет на видимость.
Для локального тестирования: adb shell dumpsys batterystats --reset перед тестом и adb shell dumpsys batterystats после.
Наши сертифицированные инженеры проводят аудит и предлагают решение с гарантией увеличения времени работы на 20–40%. Свяжитесь с нами для аудита — оценим проект и предложим решение.







