MonoBehaviour.OnApplicationFocus(bool)
Параметры
| Параметр | Описание |
|---|---|
| hasFocus | True, если GameObjects имеет фокус, в противном случае False. |
Описание
Отправляется всем GameObjects, когда игрок получает или теряет фокус.
OnApplicationFocus вызывается, когда приложение теряет или получает фокус. Переключение по Alt+Tab или Cmd+Tab может передать фокус от приложения Unity другому настольному приложению. В результате GameObject получают вызов OnApplicationFocus с аргументом false. Когда пользователь возвращается в приложение Unity, GameObject получают вызов OnApplicationFocus с аргументом true.
OnApplicationFocus может быть сопрограммой; для этого используйте в функции оператор yield. При такой реализации он выполняется дважды в начальном кадре: сначала как раннее уведомление, а затем на обычном этапе обновления сопрограммы.
В Android включение экранной клавиатуры вызывает событие OnApplicationFocus( false ). Если при включённой клавиатуре нажать Домой, вызывается событие OnApplicationPause(), а не событие OnApplicationFocus().
Примечание: когда Редактор находится в режиме Play, OnApplicationFocus вызывается при потере или получении фокуса представлением Game. Если фокус принадлежит внешнему приложению (то есть приложению, отличному от Unity) и вы щёлкаете другую вкладку Редактора, ::OnApplicationFocus вызывается дважды в одном кадре. В первый раз OnApplicationFocus вызывается с hasFocus, равным true, поскольку представление Game возвращает фокус, когда его получает Unity. Во второй раз OnApplicationFocus вызывается с hasFocus, равным false, поскольку представление Game передаёт фокус выбранной вкладке Редактора.
Чтобы сократить число вызовов OnApplicationFocus, когда Редактор находится в режиме Play, а вы работаете с другими его окнами, вынесите представление Game в отдельное плавающее окно.
using UnityEngine;
public class AppPaused : MonoBehaviour { bool isPaused = false;
void OnGUI() { if (isPaused) GUI.Label(new Rect(100, 100, 50, 30), "Game paused"); }
void OnApplicationFocus(bool hasFocus) { isPaused = !hasFocus; }
void OnApplicationPause(bool pauseStatus) { isPaused = pauseStatus; } }