使用适用于 Android XR 的 Unity 进行开发

本指南简要介绍了如何使用 Unity 开发 Android XR 应用。Android XR 可与您对 Unity 的熟悉工具和功能搭配使用。由于 Unity 的 Android XR 支持基于 OpenXR 构建,因此 Unity 还支持 OpenXR 概览中介绍的许多功能。

请按照本指南了解以下内容:

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

针对 Android XR 的 Unity 支持

构建适用于 Android XR 的 Unity 应用时,您可以利用 Unity 6 中的混合现实工具和功能。其中包括使用 XR Interaction ToolkitAR FoundationOpenXR Plugin 的混合现实模板,可帮助您快速上手。使用 Unity for Android XR 构建应用时,我们建议您将通用渲染管线 (URP) 用作渲染管线,并将 Vulkan 用作图形 API。借助这些功能,您可以利用 Unity 的一些较新的图形功能,这些功能仅受 Vulkan 支持。如需详细了解如何配置这些设置,请参阅项目设置指南

Unity XR 基础知识

如果您刚开始接触 Unity 或 XR 开发,可以参阅 Unity 的 XR 手册,了解基本 XR 概念和工作流程。XR 手册包含以下方面的信息:

开发和发布 Android 应用

Unity 提供了有关针对 Android 开发、构建和发布的深度文档,涵盖Unity 中的 Android 权限Android build 设置针对 Android 构建应用提交到 Google Play等主题。

适用于 Android XR 的 Unity 软件包

有两个软件包支持构建适用于 Android XR 的 Unity 应用。这两个软件包都是 XR 提供程序插件,可通过 Unity 的 XR 插件管理软件包启用。XR 插件管理器添加了“Project Settings”(项目设置),用于管理 XR 插件的加载、初始化、设置和构建支持,并提供相关帮助。如需允许应用在运行时执行 OpenXR 功能,必须通过插件管理器为项目启用这些功能。

此图片展示了一个示例,展示了您可以在哪里通过 Unity 的编辑器启用这些功能组。

Unity XR 插件管理界面示例

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 原点 GameObject 会自动通过其 XROrigin 组件和包含相机和 TrackedPoseDriver 的 GameObject 层次结构,处理设备跟踪并将可跟踪对象转换为 Unity 的坐标系。

相机

Android XR:AR 相机

不适用

此功能支持光照估算和全屏透传。

平面检测

Android XR:AR 平面

Android XR(扩展程序):平面

这两项功能是完全相同的,请只使用其中一种。包含了 Android XR(扩展):平面,以便开发者无需依赖于 Unity OpenXR Android XR 软件包,即可使用 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 插件)

  • 支持眼动跟踪的注视点渲染:分辨率较高的区域位于用户当前注视的中心位置,因此对用户来说不太明显

注视点(旧版)

通过降低用户视野边缘区域的分辨率,焦点渲染可加快渲染速度。只有使用 URP 和 Vulkan 的应用支持 Unity 的视网膜渲染功能。Android XR Extensions for Unity 中的 Foveation(旧版)功能也支持 BiRP 和 GLES。我们建议尽可能使用 Unity 的视网膜渲染功能。请注意,在针对 Android XR 构建时,我们建议同时使用 URP 和 Vulkan。

无边界引用空间

不适用

Android XR:无边界引用空间

此功能会将 XRInputSubsystem 跟踪源模式设置为无界。无界表示 XRInputSubsystem 会跟踪与世界锚点相关的所有 InputDevice(该锚点可能会发生变化)。

环境混合模式

不适用

环境混合模式

借助此功能,您可以设置 XR 环境混合模式,该模式用于控制启用透视功能时虚拟图像与真实环境的混合方式。

输入和互动

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

除了手部和眼球跟踪之外,系统还支持 6DoF 控制器、鼠标和实体键盘等外围设备。这意味着,适用于 Android XR 的应用应支持手部互动,并且不能假定所有设备都附带控制器。

互动情况分析

Unity 使用互动配置文件来管理您的 XR 应用与各种 XR 设备和平台之间的通信方式。这些配置文件会为不同的硬件配置确定预期的输入和输出,确保在各种平台上实现兼容性和一致的功能。通过启用互动配置文件,您可以确保 XR 应用在不同设备上正常运行、保持一致的输入映射,以及能够访问特定 XR 功能。如需设置互动情况个人资料,请执行以下操作:

  1. 打开 Project Settings 窗口(菜单:Edit > Project Settings)。
  2. 点击 XR Plug-in Management 以展开插件部分(如果需要)。
  3. 在 XR 插件列表中选择 OpenXR
  4. 互动情况设置部分中,选择 + 按钮以添加设置。
  5. 从列表中选择要添加的配置文件。

手部互动

OpenXR 插件提供手部互动 (XR_EXT_hand_interaction),您可以通过启用手部互动配置文件,在 Unity 输入系统中公开 设备布局。此互动个人资料适用于由 OpenXR 定义的四种操作姿势支持的手部输入:“捏合”“戳”“瞄准”和“握持”。如果您需要其他手部互动或手部跟踪功能,请参阅本页中的 XR 手部

眼神交互

OpenXR 插件提供注视交互 (XR_EXT_eye_gaze_interaction),您可以使用此布局检索扩展程序返回的眼部姿势数据(位置和旋转)。如需详细了解注视点交互,请参阅 OpenXR 输入指南

控制器互动

Android XR 支持适用于 6DoF 控制器的 Oculus Touch 控制器配置文件。这两种配置文件均由 OpenXR 插件提供。

鼠标互动

Android XR 鼠标交互配置文件 (XR_ANDROID_mouse_interaction) 由适用于 Unity 的 Android XR 扩展程序提供。它会在 Unity 输入系统中公开 <AndroidXRMouse> 设备布局。

手掌姿势互动

OpenXR 插件支持手掌手势互动 (XR_EXT_palm_pose),该互动会在 Unity 输入系统中公开 <PalmPose> 布局。手掌姿势并非用于替代用于执行手部跟踪的扩展程序或软件包,以实现更复杂的用例;而是可用于放置应用专用视觉内容,例如头像视觉内容。手掌姿势包括手掌位置和方向。

XR 手部

借助 XR Hands 软件包,您可以访问手部跟踪数据(XR_EXT_hand_trackingXR_FB_hand_tracking_aim),并提供封装容器,以将手部关节数据从手部跟踪转换为输入姿势。如需使用 XR Hands 软件包提供的功能,请启用手部跟踪子系统Meta 手部跟踪瞄准 OpenXR 功能。

展示如何启用手部跟踪的示例

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

如需了解详情,请参阅 Unity 的关于在项目中设置 XR 手的文档

选择手部渲染方式

Android XR 支持两种手部渲染方式:手部网格和预制模块可视化程序。

手部网格

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

XR 手部预制模块

XR 手部软件包包含一个名为手部可视化程序的示例,其中包含完全绑定的左手和右手,用于渲染与上下文相符的用户手部表示法。

系统手势

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

当用户与系统导航菜单互动时,应用将仅响应头部跟踪事件。XR Hands 软件包可以检测用户执行特定操作(例如与此系统导航菜单互动)的时间。通过检查 AimFlags SystemGesture 和 DominantHand,您可以了解何时执行此系统操作。如需详细了解 AimFlags,请参阅 Unity 的 Enum MetaAimFlags 文档

XR 互动工具包

XR 交互工具包是一种基于组件的高级交互系统,用于创建 VR 和 AR 体验。它提供了一个框架,可让您通过 Unity 输入事件实现 3D 和界面互动。它支持互动任务,包括触感反馈、视觉反馈和运动。