本指南概述了如何使用 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 Toolkit、AR Foundation 和 OpenXR Plugin 的混合现实模板,可帮助您快速入门。使用 Unity 为 Android XR 构建应用时,我们建议您将通用渲染管线 (URP) 作为渲染管线,并将 Vulkan 作为图形 API。借助这些功能,您可以 利用 Unity 的一些 图形功能,这些功能 仅在 Vulkan 中受支持。如需详细了解如何配置这些设置,请参阅项目设置指南。
Unity XR 基础知识
如果您是 Unity 或 XR 开发新手,可以参阅 Unity's XR Manual,了解基本的 XR 概念和工作流。XR 手册包含以下相关信息:
- XR 提供程序插件,包括 Unity OpenXR: Android XR 和适用于 Unity 的 Android XR 扩展程序
- XR 支持软件包,用于添加其他应用级 功能
- 一份XR 架构指南,介绍了 Unity XR 技术 堆栈和 XR 子系统
- XR 项目设置
- 构建和运行 XR 应用
- XR 图形指南,包括通用渲染管线、立体呈现、注视点渲染、多视图渲染区域和 VR 帧时间
- XR 音频指南,包括对音频 空间化器的支持
为 Android 开发和发布应用
Unity 提供了有关为 Android 开发、构建和发布的深入文档,涵盖的主题包括 Unity 中的 Android 权限、Android 构建设置、为 Android 构建应用以及向 Google Play 交付应用。
适用于 Android XR 的 Unity 软件包
有两个软件包可用于构建适用于 Android XR 的 Unity 应用。这两个软件包都是 XR 提供程序插件,可以通过 Unity 的 XR 插件管理 软件包启用 。XR 插件管理器添加了项目设置,用于管理 XR 插件的加载、初始化、设置和构建支持,并提供相关帮助。如需允许应用在运行时执行 OpenXR 功能,项目必须通过插件管理器启用这些功能。
下图展示了您可以通过 Unity 的编辑器启用这些功能组的示例。
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 扩展程序功能字符串 |
用例和预期行为 |
|---|---|---|---|
Android XR:AR 会话
|
Android XR(扩展程序):会话管理
|
如需使用任一软件包中的功能,您必须为该软件包启用 AR 会话功能。您可以同时启用这两个功能集;各个功能将相应地处理冲突。 |
|
不适用 |
不适用 |
设备跟踪用于跟踪设备在物理空间中的位置和旋转。XR Origin GameObject 使用其 XROrigin 组件和 GameObject 层次结构(包含相机和 TrackedPoseDriver)自动处理设备跟踪并将可跟踪对象转换为 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 面部
|
Android XR:面部跟踪
|
通过 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:直通组合层
|
使用 Unity 的组合层支持功能创建基本 组合层(例如四边形、圆柱体、投影)。Android XR:直通组合层可用于创建具有自定义网格的直通层,并从 Unity 的 GameObject 读取。 |
|
注视点渲染(需要 OpenXR 插件)
|
注视点渲染(旧版) |
注视点渲染通过降低用户周边视觉区域的分辨率来加快渲染速度。Unity 的 注视点渲染功能 仅适用于使用 URP 和 Vulkan 的应用。适用于 Unity 的 Android XR 扩展程序中的注视点渲染(旧版)功能还支持内置渲染管线和 OpenGL ES。我们建议尽可能使用 Unity 的 注视点渲染功能,并注意在为 Android XR 构建时建议使用 URP 和 Vulkan。 |
|
不适用 |
此功能将 XRInputSubsystem 跟踪原点模式设置为 无界。无界表示 XRInputSubsystem 会跟踪与世界锚点相关的所有 InputDevice,而世界锚点可能会发生变化。 |
||
不适用 |
环境混合模式 |
借助此功能,您可以设置 XR 环境混合模式,该模式控制在启用直通时虚拟图像与现实环境的混合方式。 |
|
不适用 |
使 |
||
不适用 |
为云端支持的服务提供会话身份验证配置策略(API 密钥、无密钥和身份验证令牌)。 |
||
不适用 |
使用可配置的多模态面部跟踪模式 ( |
||
不适用 |
允许使用 |
||
Android XR:AR 相机 |
不适用 |
允许使用 Unity 的 ARCameraFeature 查询和设置现实世界直通调暗级别。 |
|
不适用 |
使用 |
||
不适用 |
允许使用 |
输入和互动
Android XR 支持多模态自然输入。
除了手部和眼动追踪之外,还支持外设,例如 6DoF 控制器、鼠标和物理键盘。这意味着 Android XR 应用应支持手部互动,并且不能假定所有设备都附带控制器。
互动配置文件
Unity 使用 互动配置文件 来管理 XR 应用与各种 XR 设备和平台之间的通信方式。这些配置文件为不同的硬件配置建立预期输入和输出,从而提高各种平台的兼容性和一致的功能。通过启用互动配置文件,您可以帮助确保 XR 应用在不同设备上正常运行、保持一致的输入映射,并有权访问特定的 XR 功能。如需设置互动配置文件,请执行以下操作:
- 打开项目设置 窗口(菜单:Edit > Project Settings )。
- 点击 XR Plug-in Management 以展开插件部分(如有必要)。
- 在 XR 插件列表中选择 OpenXR 。
- 在 Interaction Profiles 部分中,选择 + 按钮以添加配置文件。
- 从列表中选择要添加的配置文件。
手部互动
手部互动 (XR_EXT_hand_interaction) 由
OpenXR 插件提供,您可以通过启用手部
互动配置文件在Unity 输入系统中公开<HandInteraction>
设备布局。将此互动配置文件用于 OpenXR 定义的四种操作姿态(“捏合”“戳”“瞄准”和“抓握”)支持的手部输入。如果您需要其他手部互动或手部追踪
功能,请参阅此页面上的 XR Hands。
眼动注视互动
眼动注视互动 (XR_EXT_eye_gaze_interaction) 由 OpenXR 插件提供,您可以使用此布局检索扩展程序返回的眼睛姿态数据(位置和旋转)。如需详细了解
眼动注视互动,请参阅 OpenXR 输入指南。
控制器互动
Android XR 支持 Oculus Touch 控制器配置文件,适用于 6DoF 控制器。这两个配置文件均由 OpenXR 插件提供。
鼠标互动
Android XR 鼠标互动配置文件 (XR_ANDROID_mouse_interaction)
由适用于 Unity 的 Android XR 扩展程序提供。它在 Unity Input System 中公开一个
<AndroidXRMouse>设备布局。
手掌姿态互动
OpenXR 插件提供对 手掌姿态
互动 (XR_EXT_palm_pose) 的支持,该支持在 Unity 输入系统 中公开 <PalmPose> 布局。
手掌姿态并非旨在替代为更复杂用例执行手部追踪的扩展程序或软件包;相反,它可用于放置应用专用的视觉内容,例如虚拟形象视觉效果。手掌姿态包括手掌位置和方向。
XR Hands
借助 XR Hands 软件包,您可以使用
XR_EXT_hand_tracking和
XR_FB_hand_tracking_aim访问手部追踪数据,并提供一个封装容器,用于将
手部追踪中的手部关节数据转换为输入姿态。如需使用 XR Hands 软件包提供的功能,请启用手部跟踪子系统 和 Meta 手部跟踪瞄准 OpenXR 功能。
如果您需要更精细的手部姿态或手部关节数据,或者
需要使用自定义手势,XR Hands
软件包可能会很有用。
如需了解详情,请参阅 Unity 的文档,了解如何在 项目中设置 XR Hands
面部跟踪置信度区域
XR_ANDROID_face_tracking 扩展程序为三个面部区域(左上、右上和下部面部)提供置信度值。这些值的范围从 0(无置信度)到 1(最高置信度),表示每个区域的面部跟踪准确度。
您可以使用这些置信度值逐步停用混合形状或将视觉滤镜(例如模糊)应用于相应的面部区域。对于基本停用,请在相应的面部区域中混合形状。
“下部面部”区域表示眼睛下方的所有内容,包括嘴巴、下巴、脸颊和鼻子。两个上部区域包括面部左右两侧的眼睛和眉毛区域。
以下 C# 代码段演示了如何在 Unity 脚本中访问和使用置信度数据:
using UnityEngine;
using Google.XR.Extensions;
public class FaceTrackingConfidence : MonoBehaviour
{
void Update()
{
if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
{
DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
return;
}
else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
{
DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
return;
}
for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
{
switch (x)
{
case (int)XRFaceConfidenceRegion.Lower:
regionText = "Bottom";
break;
case (int)XRFaceConfidenceRegion.LeftUpper:
regionText = DebugTextConfidenceLeft;
break;
case (int)XRFaceConfidenceRegion.RightUpper:
regionText = DebugTextConfidenceRight;
break;
}
}
}
如需了解详情,请参阅 适用于 Unity 的 Android XR 扩展程序文档。
选择一种渲染手部的方式
Android XR 支持两种渲染手部的方式:手部网格和预制可视化工具。
手部网格
Android XR Unity 软件包包含一个手部网格功能,该功能提供
对 XR_ANDROID_hand_mesh extension 的访问权限。手部网格功能为用户的手部提供网格。手部网格包含表示手部几何图形的三角形的顶点。此功能旨在用于提供表示用户手部真实几何图形的个性化网格,以进行可视化。
XR Hands 预制件
XR Hands 软件包包含一个名为 Hands 可视化工具的示例,其中包含完全装配的左手和右手 ,用于渲染用户手部的上下文适当表示。
系统手势
Android XR 包含一个系统手势,用于打开菜单,供用户返回、打开启动器或获取正在运行的应用的概览。用户可以使用惯用手捏合来激活此系统菜单。
当用户与系统导航菜单互动时,应用只会响应头部跟踪事件。XR Hands 软件包可以检测用户何时执行特定操作,例如与此系统导航菜单互动。检查 AimFlags、SystemGesture 和 DominantHand 可让您了解何时执行此系统操作。如需详细了解 AimFlags,请参阅
Unity 的 枚举 MetaAimFlags 文档。
XR Interaction Toolkit
XR Interaction Toolkit 软件包是一个高级的 基于组件的互动系统,用于创建 VR 和 AR 体验。它提供了一个框架,可从 Unity 输入事件中提供 3D 和界面互动。它支持互动任务,包括触感反馈、视觉反馈和移动。
OpenXR™ 和 OpenXR 徽标是 The Khronos Group Inc. 的商标,已在中国、欧盟、日本和英国注册为商标。