
Содержание
Пауза и фокус игры
Во время просмотра рекламы, при открытии панели авторизации или покупок, при потере фокуса игры и смене вкладок, при скрытии браузера и в других похожих обстоятельствах — игра должна останавливаться. Звук должен быть отключён, а курсор мыши активен. Рассмотрим, как это сделать с помощью инструментов PluginYG.
Автоматическая пауза
В настройках плагина → Basic Settings есть параметр Auto Pause Game, по умолчанию он включён. При просмотре рекламы и в других ситуациях, когда это необходимо — игра будет остановлена. Пауза контролирует глобальные параметры Time.timeScale, AudioListener.pause, Cursor.visible и Cursor.lockState, а также отключает EventSystem, потому что иногда с ним есть проблемы.
Вы можете менять значения перечисленных выше параметров в своём коде независимо от того, остановил плагин игру или нет. После паузы параметры будут установлены на те значения, что были прописаны в вашем коде. Даже если во время паузы ваш код, например, устанавливает timeScale = 1, то плагин отловит этот момент и вернёт timeScale = 0. Но после того, как пауза будет закончена, плагин установит значение timeScale = 1, т. к. в вашем коде вы так прописали.
При включённой автоматической паузе всё же могут возникнуть проблемы. Например, если во время паузы (допустим, во время просмотра рекламы) в коде игры смена состояния курсора меняется больше одного раза, то после закрытия рекламы курсор может исчезнуть, хотя его должно было быть видно. Это техническое ограничение, которое не представляется возможным обойти.
Метод установки состояния
Рекомендуется использовать метод плагина PauseGameYG.SetState, в котором вы явно будете указывать все состояния. Он синхронизируется с паузой игры во время просмотра рекламы и при других обстоятельствах, что исключает описанные выше возможные проблемы.
Также вы не запутаетесь, в каком скрипте изменяется timeScale или что-то ещё, просто посмотрите ссылки, в каких местах вызывается метод SetState, чтобы получить список всех мест, в которых изменяются параметры, связанные с паузой.
Метод имеет два варианта:
PauseGameYG.SetState(timeScale, audioPause, cursorEnable)— установите от0до1дляtimeScale,trueилиfalseдляaudioPauseиtrueилиfalseдляcursorEnable. КогдаcursorEnable = true, курсор виден и свободно перемещается. КогдаcursorEnable = false, курсор скрыт и фиксируется в центре экрана, что блокирует его перемещение.PauseGameYG.SetState(timeScale, audioPause, cursorVisible, cursorLockState)— тоже самое, но можно отдельно установить видимость курсора (cursorVisible) и состояние блокировки (cursorLockState).
Пример использования:
if (openMenu)
{
// Открыто меню. Время остановлено, аудио пауза включена, курсор видно.
PauseGameYG.SetState(0, true, true);
}
else
{
// Меню закрыто. Время активно, аудио пауза выключена, курсор скрыт.
PauseGameYG.SetState(1, false, false);
}
Чтобы избежать лишней путаницы, метод SetState всегда ожидает явного указания всех параметров, а не только передачу одного TimeScale или другие отдельные вариации.
Тестирование
В настройках плагина → General Simulation опция Pause On Focus Game запускает симуляцию фокуса/расфокуса игры в Unity Editor. Так, вы сможете тестировать работу смены состояний при смене фокуса и паузе. Но обязательно тестируйте и в билде игры, в реальных условиях.
Базовый API паузы
Событие YG2.onPauseGame (тип Action<bool>) — вызывается при любых обстоятельствах, когда пауза начинается и когда заканчивается. Вернёт true, когда необходимо остановить игру, и вернёт false, когда требуется продолжить игру.
YG2.isPauseGame — boolean поле, вернёт состояние паузы.
YG2.PauseGame — метод для остановки игры, который использует автоматическая пауза в PluginYG. Принимает параметр boolean: true — установить паузу, false — продолжить игру. Также имеет и другие параметры, чтобы при включении паузы можно было выбрать: контролировать ли звук, время, курсор мыши, Event System.
YG2.PauseGameNoEditEventSystem — метод паузы без остановки Event System. Создан чтобы привязывать через Unity Events в интерфейсе.
Базовый API фокуса
(Не работает на платформе Crazy Games)
onShowWindowGame — событие срабатывает, когда игра становится в фокусе.
onHideWindowGame — выход из фокуса.
onFocusWindowGame — возвращает bool значение.
isFocusWindowGame — с помощью этого поля можно узнать в фокусе ли сейчас игра.