使用 Unity 开发 Android XR 应用

本指南概述了如何使用 Unity 开发 Android XR 应用。Android XR 与您熟悉的 Unity 工具和功能兼容,并且由于 Unity 的 Android XR 支持是基于 OpenXR 构建的,因此在 OpenXR 概览中描述的许多功能也受 Unity 支持。

遵循本指南以了解:

  • Unity 对 Android XR 的支持
    • Unity XR 基础知识
    • 开发和发布适用于 Android XR 的应用
    • 适用于 Android XR 的 Unity 软件包
      • Unity OpenXR:Android XR 软件包
      • 适用于 Unity 的 Android XR 扩展
      • 功能和兼容性注意事项
  • 输入和交互

Unity 对 Android XR 的支持

当您为 Android XR 构建 Unity 应用时,可以利用 Unity 6 中的混合现实工具和功能。这包括使用 XR Interaction ToolkitAR FoundationOpenXR Plugin 的混合现实模板,帮助您快速入门。使用 Unity 为 Android XR 构建应用时,我们建议将通用渲染管线 (URP) 作为您的渲染管线,并将 Vulkan 作为您的图形 API。这些功能使您能够利用 Unity 的一些新图形功能,这些功能仅受 Vulkan 支持。有关如何配置这些设置的更多信息,请查阅项目设置指南

Unity XR 基础知识

如果您是 Unity 或 XR 开发新手,可以参考 Unity 的 XR 手册,了解基本的 XR 概念和工作流。XR 手册包含以下信息:

开发和发布适用于 Android 的应用

Unity 提供了深入的文档,介绍如何为 Android 开发、构建和发布应用,涵盖的主题包括 Unity 中的 Android 权限Android 构建设置为 Android 构建您的应用以及分发到 Google Play

适用于 Android XR 的 Unity 软件包

有两个软件包支持为 Android XR 构建 Unity 应用。这两个软件包都是 XR 提供程序插件,可以通过 Unity 的 XR 插件管理软件包启用。XR 插件管理器添加了项目设置,用于管理和帮助加载、初始化、设置以及对 XR 插件的构建支持。为了让您的应用在运行时执行 OpenXR 功能,项目必须通过插件管理器启用这些功能。

此图显示了如何在 Unity 编辑器中启用这些功能组的示例。

Example of the unity xr plugin management screen

Unity OpenXR Android XR

Unity OpenXR Android XR 软件包是一个 XR 插件,用于向 Unity 添加 Android XR 支持。此 XR 插件提供了 Unity 大部分 Android XR 支持,并为 AR Foundation 项目启用了 Android XR 设备支持。AR Foundation 专为希望创建 AR 或混合现实体验的开发者设计。它提供了 AR 功能的接口,但本身不实现任何功能。Unity OpenXR Android XR 软件包提供了实现。要开始使用此软件包,请查看其软件包手册,其中包含入门指南。

适用于 Unity 的 Android XR 扩展

适用于 Unity 的 Android XR 扩展补充了 Unity OpenXR Android XR 软件包,并包含其他功能,可帮助您构建沉浸式体验。它可以单独使用,也可以与 Unity OpenXR Android XR 软件包一起使用。

要开始使用此软件包,请遵循我们的项目设置指南适用于 Unity 的 Android XR 扩展导入快速入门

功能和兼容性注意事项

下表描述了 Unity OpenXR:Android XR 软件包和适用于 Unity 的 Android XR 扩展软件包所支持的功能,可用于确定哪个软件包包含您需要的功能以及任何兼容性注意事项。

功能

Unity OpenXR: Android XR 功能字符串

适用于 Unity 的 Android XR 扩展功能字符串

用例和预期行为

AR 会话

Android XR: AR 会话

  • 功能设置包括优化缓冲区丢弃 (Vulkan)

Android XR(扩展):会话管理

  • 功能设置包括子采样 (Vulkan) 和 URP SpaceWarp (Vulkan)

要使用任一软件包中的功能,您必须为该软件包启用 AR 会话功能。您可以同时启用两个功能集;各个功能将相应地处理冲突。

设备追踪

不适用

不适用

设备追踪用于追踪设备在物理空间中的位置和旋转。XR Origin GameObject 通过其 XROrigin 组件和包含 Camera 以及 TrackedPoseDriver 的 GameObject 层次结构,自动处理设备追踪和将可追踪对象转换为 Unity 的坐标系。

摄像头

Android XR: AR 摄像头

不适用

此功能支持光照估计和全屏透视。

平面检测

Android XR: AR 平面

Android XR(扩展):平面

这两个功能是相同的;使用其中一个即可。包含 Android XR(扩展):平面,是为了让开发者可以使用 Android XR(扩展):对象追踪和持久锚点功能,而无需依赖 Unity OpenXR Android XR 软件包。将来,Android XR(扩展):平面将被移除,取而代之的是 Android XR: AR 锚点。

对象追踪

不适用

Android XR(扩展):对象追踪

此功能支持在物理环境中检测和追踪对象,与参考对象库结合使用。

面部追踪

Android XR: AR 面部

  • 仅限 XR_ANDROID_avatar_eyes
  • 无面部追踪

Android XR: 面部追踪

  • XR_ANDROID_face_tracking

头像眼睛支持通过 Android XR: AR 面部功能提供。通过 Android XR: 面部追踪功能访问用户的面部表情。如果需要,这两个功能可以一起使用。

光线投射

Android XR: AR 光线投射

  • 平面锚点
  • 深度锚点

不适用

此功能允许您投射光线,并计算该光线与在物理环境中检测到的平面可追踪对象或深度可追踪对象之间的交点。

锚点

Android XR: AR 锚点

Android XR(扩展):锚点

  • 功能设置包括持久性。

这两个功能都支持空间锚点和平面锚点;使用其中一个功能即可。对于持久锚点,请使用 Android XR(扩展):锚点。将来,Android XR(扩展):锚点将被移除,所有锚点功能都将包含在 Android XR: AR 锚点中。

遮挡

Android XR: AR 遮挡

  • 环境深度

不适用

遮挡功能允许您的应用中的混合现实内容在物理环境中的对象后面显得隐藏或部分遮挡。

性能指标

Android XR 性能指标

不适用

使用此功能可访问 Android XR 设备的性能指标。

合成层

合成层支持(需要 OpenXR 插件和 XR 合成层)

Android XR: 透视合成层

  • XR_ANDROID_composition_layer_passthrough_mesh

使用 Unity 的合成层支持创建基本的合成层(例如四边形、圆柱体、投影)。Android XR: 透视合成层可用于创建具有自定义网格的透视层,从 Unity 的 GameObject 读取。

注视点渲染

注视点渲染(需要 OpenXR 插件)

  • 支持眼动追踪注视点渲染:高分辨率区域以用户当前注视的位置为中心,使其对用户不那么明显

注视点渲染(旧版)

注视点渲染通过降低用户外围视觉区域的分辨率来加快渲染速度。Unity 的注视点渲染功能仅支持使用 URP 和 Vulkan 的应用。适用于 Unity 的 Android XR 扩展中的注视点渲染(旧版)功能也支持内置渲染管线和 OpenGL ES。我们建议尽可能使用 Unity 的注视点渲染功能,并请注意,为 Android XR 构建时建议同时使用 URP 和 Vulkan。

无边界参考空间

不适用

Android XR: 无边界参考空间

此功能将 XRInputSubsystem 的追踪原点模式设置为无边界。无边界表示 XRInputSubsystem 相对于一个可更改的世界锚点追踪所有 InputDevices。

环境混合模式

不适用

环境混合模式

此功能允许您设置XR 环境混合模式,该模式控制在启用透视时虚拟图像与真实世界环境的混合方式。

输入和交互

Android XR 支持多模态自然输入。

除了手部和眼部追踪,还支持 6 自由度控制器、鼠标和物理键盘等外设。这意味着 Android XR 应用应支持手部交互,并且不能假设所有设备都会配备控制器。

交互配置文件

Unity 使用交互配置文件来管理您的 XR 应用如何与各种 XR 设备和平台通信。这些配置文件为不同的硬件配置建立了预期的输入和输出,确保了在各种平台上的兼容性和一致功能。通过启用交互配置文件,您可以确保您的 XR 应用在不同设备上正常运行,保持一致的输入映射,并访问特定的 XR 功能。要设置交互配置文件:

  1. 打开项目设置窗口(菜单:编辑 > 项目设置)。
  2. 点击XR 插件管理以展开插件部分(如有必要)。
  3. 在 XR 插件列表中选择 OpenXR
  4. 交互配置文件部分,选择+按钮以添加配置文件。
  5. 从列表中选择要添加的配置文件。

手部交互

手部交互 (XR_EXT_hand_interaction) 由 OpenXR 插件提供,您可以将其暴露到通过启用手部交互配置文件,在Unity 输入系统中实现设备布局。此交互配置文件用于支持 OpenXR 定义的四种动作姿势(“捏取”、“戳动”、“瞄准”和“抓握”)的手部输入。如果您需要额外的手部交互或手部追踪功能,请参阅本页面的XR Hands

眼动凝视交互

眼动凝视交互 (XR_EXT_eye_gaze_interaction) 由 OpenXR 插件提供,您可以使用此布局检索扩展返回的眼睛姿态数据(位置和旋转)。在 OpenXR 输入指南中阅读有关眼动凝视交互的更多信息

控制器交互

Android XR 支持适用于 6 自由度控制器的 Oculus Touch 控制器配置文件。这两个配置文件都由 OpenXR 插件提供。

鼠标交互

适用于 Unity 的 Android XR 扩展提供了Android XR 鼠标交互配置文件 (XR_ANDROID_mouse_interaction)。它在 Unity 输入系统中暴露了一个 <AndroidXRMouse> 设备布局。

手掌姿势交互

OpenXR 插件支持手掌姿势交互 (XR_EXT_palm_pose),它在 Unity 输入系统中暴露了 <PalmPose> 布局。手掌姿势并非旨在替代为更复杂用例执行手部追踪的扩展或软件包;相反,它可用于放置应用特定的视觉内容,例如头像视觉效果。手掌姿势包括手掌位置和方向。

XR Hands

XR Hands 软件包允许您访问手部追踪数据 (XR_EXT_hand_trackingXR_FB_hand_tracking_aim),并提供一个包装器,用于将手部追踪数据中的手部关节数据转换为输入姿态。要使用 XR Hands 软件包提供的功能,请启用手部追踪子系统Meta Hand Tracking Aim OpenXR功能。

Example showing how to enable hand tracking

如果您需要更精细的手部姿态或手部关节数据,或者需要使用自定义手势,XR hands 软件包会很有用。

有关更多详细信息,请参阅 Unity 关于在项目中设置 XR Hands 的文档

选择一种渲染手部的方式

Android XR 支持两种渲染手部的方式:手部网格和预制件可视化工具。

手部网格

Android XR Unity 软件包包含一个手部网格功能,可提供对 XR_ANDROID_hand_mesh extension 的访问。手部网格功能为用户的手部提供网格。手部网格包含表示手部几何形状的三角形顶点。此功能旨在提供一个个性化网格,表示用户手部的真实几何形状,用于可视化。

XR Hands 预制件

XR Hands 软件包包含一个名为手部可视化工具的示例,其中包含完全绑定(rigged)的左右手,用于渲染用户手部的符合上下文的表示。

系统手势

Android XR 包含一个系统手势,用于为用户打开菜单,以便返回、打开启动器或查看当前正在运行的应用。用户可以通过使用惯用手捏合来激活此系统菜单。

当用户与系统导航菜单交互时,应用将仅响应头部追踪事件。XR Hands 软件包可以检测用户何时执行特定操作,例如与此系统导航菜单交互。检查 AimFlags SystemGesture 和 DominantHand 将让您知道何时执行了此系统操作。有关 AimFlags 的更多信息,请参阅 Unity 的 Enum MetaAimFlags 文档

XR Interaction Toolkit

XR Interaction Toolkit 软件包是一个高级的、基于组件的交互系统,用于创建 VR 和 AR 体验。它提供了一个框架,使 3D 和 UI 交互可以从 Unity 输入事件中获得。它支持包括触觉反馈、视觉反馈和运动在内的交互任务。


OpenXR™ 和 OpenXR 徽标是 The Khronos Group Inc. 拥有的商标,并在中国、欧盟、日本和英国注册为商标。