Ключевые слова для поиска:
- спящий режим экрана
-
### Контекст
У меня есть Unity-игра, запущенная на Android. Когда она долго работает, экран гаснет (входит в спящий режим). Я хочу, чтобы экран не гас, пока игра запущена. Подскажите, какую настройку в Unity нужно изменить или какой код добавить, чтобы экран оставался включённым всё время?
### Решение
На Android устройствах по умолчанию экран начинает тускнеть и затем отключается после определённого времени без активности пользователя. В контексте игры это нежелательно: если игрок не прикасается к экрану (например, управление происходит акселерометром или персонаж стоит без действий), система может погасить экран и перевести устройство в спящий режим. Это прерывает игровой процесс и раздражает пользователя. Поэтому **необходимо удерживать экран включённым всё время работы игры**, чтобы он не гас и не блокировался автоматически.
## Решение средствами Unity: свойство `Screen.sleepTimeout`
Unity предоставляет встроенное решение для управления автоотключением экрана – статическое свойство `Screen.sleepTimeout`. С помощью него можно запретить уход экрана в сон, не прибегая к Android SDK напрямую. Достаточно один раз установить ему специальное значение `SleepTimeout.NeverSleep` при запуске игры. Это **отключит таймер авто-выключения** экрана на всём протяжении работы приложения. Проще говоря, пока игра активна, экран будет оставаться включённым бесконечно долго, даже если пользователь не прикасается к устройству.
**Пример реализации в Unity (C#):** создайте скрипт и вызовите установку таймаута в методе инициализации, например в `Awake()` или `Start()` любого объекта, существующего на всех сценах игры (например, GameManager). Код будет таким:
```csharp
using UnityEngine;
public class KeepScreenOn : MonoBehaviour
{
void Awake()
{
// Отключаем авто-отключение/затухание экрана
Screen.sleepTimeout = SleepTimeout.NeverSleep;
}
void OnApplicationPause(bool paused)
{
// Если игра свернута или приостановлена, возвращаем настройку по умолчанию
Screen.sleepTimeout = paused ? SleepTimeout.SystemSetting : SleepTimeout.NeverSleep;
}
}
```
В приведённом коде свойство `Screen.sleepTimeout` устанавливается в значение `SleepTimeout.NeverSleep` – это специальная константа Unity, означающая _«никогда не гасить экран»_. Таким образом, **экран не будет ни тускнеть, ни отключаться** всё время, пока приложение активно. В методе `OnApplicationPause` показано, как можно восстанавливать системные настройки (`SleepTimeout.SystemSetting`) при сворачивании игры, чтобы не препятствовать сну экрана вне игры. Хотя сбрасывать значение не обязательно (при закрытии приложения система сама вернёт поведение экрана к норме), такой подход полезен для экономии батареи, если играPaused или приостановлена.