hasFocus | 如果游戏对象获得焦点,则为 True,否则为 False。 |
当玩家获得或失去焦点时,发送到所有游戏对象。
OnApplicationFocus 在应用程序失去或获得焦点时被调用。Alt-Tab 或 Cmd-Tab 可以将焦点从 Unity 应用程序切换到另一个桌面应用程序。这会导致游戏对象收到一个 OnApplicationFocus 调用,其参数设置为 false。当用户切换回 Unity 应用程序时,游戏对象会收到一个 OnApplicationFocus 调用,其参数设置为 true。
OnApplicationFocus 可以是一个协程;要做到这一点,请在函数中使用 yield 语句。以这种方式实现,它在初始帧期间会被评估两次:第一次作为早期通知,第二次在正常的协程更新步骤期间。
在 Android 上,当启用屏幕键盘时,它会导致 OnApplicationFocus( false ) 事件。如果您在启用键盘时按下 **Home** 键,则会调用 OnApplicationPause() 事件,而不是 OnApplicationFocus() 事件。
注意:如果编辑器处于播放模式,则当游戏视图失去或获得焦点时,会调用 OnApplicationFocus。如果外部应用程序(即 Unity 以外的应用程序)具有焦点,并且您单击不同的编辑器选项卡,则 ::OnApplicationFocus 会在一帧内被调用两次。第一次,OnApplicationFocus 被调用,hasFocus 设置为 true,因为当 Unity 重新获得焦点时,游戏视图会重新获得焦点。第二次,OnApplicationFocus 被调用,hasFocus 设置为 false,因为游戏视图将焦点丢失到被单击的编辑器选项卡。
为了最大程度地减少在编辑器处于播放模式并且您正在使用编辑器的其余部分时调用 OnApplicationFocus 的次数,请将游戏视图拖动到浮动窗口中。
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; } }