开发

应用生命周期处理

更新时间: 2025年9月10日
为了成功开发基于 Horizon 操作系统的 Quest 设备应用,开发者应了解 Horizon 操作系统提供的生命周期事件。由于 VRC.Quest.Functional.2VRC.Quest.Input.4 等要求,沉浸式应用必须能够妥善处理生命周期事件,否则无法在 Horizon 商店发布。正确处理生命周期事件有助于改善应用带来的用户体验。

焦点状态

应用暂停

当 Horizon 操作系统预期应用停止模拟、渲染和接受输入时,便会发送应用暂停事件。应用在发生这些事件时仍会在后台运行,但用户无法看到应用或与之交互。暂停期间,应用不应接受任何交互操作。请参阅 VRC.Quest.Functional.2 了解更多详情。
如需接收这些事件,请使用 Unity 内置的 MonoBehaviour.OnApplicationPause(bool pauseStatus) 函数。

输入焦点

Horizon 操作系统支持同时运行多个应用。例如,某用户在玩沉浸式游戏时,可能打开一个在游戏过程中始终可见的 2D 浏览器窗口来查看攻略。在此场景中,尽管浏览器窗口和沉浸式游戏均对用户可见,但预期每次只有一个应用会响应用户输入。当 Horizon 操作系统检测到用户意图向其他应用发送输入时,它会向失去焦点的应用及获得焦点的应用(如适用)发送输入焦点事件。
当失去输入焦点时,应用必须停止渲染所有被追踪的控制器/手部,并忽略所有输入(参阅 VRC.Quest.Input.4)。然而,失去输入焦点对于音频、渲染和模拟效果的影响可由应用开发者自行确定。例如,单人动作游戏在失去输入焦点时可能需要完全暂停,而沉浸式视频播放器则可能需要继续视频播放。
如需接收这些事件,请订阅 OVRManager.InputFocusAcquiredOVRManager.InputFocusLost 事件,或者轮询 OVRManager.hasInputFocus 属性。您也可以使用 Unity 内置的 MonoBehaviour.OnApplicationFocus(bool hasFocus) 函数。

HMD 佩戴/摘除

当用户实际佩戴或摘除物理设备时,便会发送 HMD 佩戴/摘除事件。尽管应用暂停事件会在用户摘除设备后几秒钟才发送,但 HMD 摘除事件会立即发送。这对于某些应用很实用,例如应用希望在暂停前保存用户状态或将用户标记为非活动状态。
如需接收这些事件,请订阅 OVRManager.HMDMountedOVRManager.HMDUnmounted 事件。

应用生命周期

Unity 应用可以监听或检查 Horizon 操作系统发送的以下常见事件。

应用启动

应用初始化时:
  • HMD Mounted
  • Input Focus Acquired

HMD 快速摘除和佩戴

当用户快速取下 HMD 然后又迅速戴上时
  • 用户摘除 HMD 时:HMDUnmounted
  • 用户戴回 HMD 时:HMDMounted

HMD 延迟摘除和佩戴

当用户取下 HMD,等待设置 > 电源 > 自动睡眠中配置的时间长度,再重新戴回设备时
  • 用户摘除 HMD 时:HMDUnmounted
  • 然后在经过配置的时间后:
    • Input Focus Lost
    • Application Paused
  • 用户戴回 HMD 时:
    • HMD Mounted
    • Application Unpaused
    • Input Focus Acquired

按下电源按钮关闭显示器

  • Application Paused
  • Input Focus Lost

按下电源按钮开启显示器

  • Application Unpaused
  • Input Focus Acquired

打开通用菜单

  • 打开通用菜单时:
    • Input Focus Lost
  • 当用户选择“继续”或关闭通用菜单时:
  • Input Focus Acquired