Snapdragon Spaces 开发指南(5)
5.4 交互包指南
5.4.1 MRTK3 设置指南
此示例场景演示了如何将 MRTK3 集成到您的 Unity 项目中。有关 MRTK 的更多信息,请访问MRTK3 文档
在 Windows 上使用 MRTK3 和 Snapdragon Spaces 设置新的 Unity 项目
本指南引导您完成如何为 Snapdragon Spaces 设置和构建全新的 MRTK3 项目的步骤。
笔记
请避免使用虚拟键盘和 Web 浏览器的组件,因为这些组件目前不受支持,可能会导致意外行为。
Unity 项目设置
从《Unity 设置指南》开始,从先决条件一直到启用空间功能。
设置完成后,保持 Unity 项目打开并记下文件路径。
MRTK 的项目配置
- 安装 MRTK3 的 MRTK 要求:
- Visual Studio 2019 社区版或更高版本
- 访问 MRTK3 包需要混合现实功能工具。目前该功能仅适用于 Windows。下载,但尚未运行。
- 您将需要 .Net 0.5+ 运行时,它包含在 Visual Studio 16.11.14+ 中
导入 MRTK3 包
- 打开混合现实功能工具(MixedRealityFeatureTool.exe)
- 等待它加载,然后单击左下角的“设置”图标。
- 单击功能选项卡。
- 选中显示预览版本复选框。
- 单击“确定”进行确认。

- 单击“开始”。
- 将“项目路径”设置为 Unity 项目的文件路径。
- 单击“发现功能”。
- 点击 MRTK3 订单项的“全选”。
- 单击“获取功能”。可能会显示一些推荐的依赖项。如果是这样,也选择它们。完成后单击“导入”以下载文件并更新 Unity 项目清单。
- 完成后,可以选择关闭功能工具,或使其保持打开状态以根据需要继续进行调整。

返回Unity完成包导入
- 切换回 Unity 项目并等待混合现实功能工具添加新功能后发生任何导入。
- 如果出现提示,请选择I made a backup, go ahead!XR 交互层蒙版。
- 如果提示重新启动,请选择Yes

场景设置
创建一个新场景。该场景将用于设置相机并从头开始输入。
修改 Snapdragon Spaces 的相机
- 从场景层次结构中删除主摄像机。
- 找到 MRTK XR Rig Prefab 并将其拖动到场景中,位于:Packages/com.microsoft.mrtk.input/Assets/Prefabs/MRTK XR Rig.prefab

配置 Snapdragon Spaces 控制器输入
如上所述,本指南仅适用于使用配套控制器作为设备输入。要设置伴侣控制器,请按照以下步骤操作。
- 在 MRTK XR Rig(顶级游戏对象)上:
- 在输入操作管理器组件中,将第二个元素添加到操作资产下拉列表中并将其设置为:Input Actions位于:Samples/Snapdragon Spaces/[version ID]/Core Samples/Shared Assets/Input Actions。这会将输入操作映射到 Snapdragon Spaces 核心示例中设置的操作,从而允许正确连接到配套控制器。

- 现在添加位于以下位置的设备指针预制件:Samples/Snapdragon Spaces/[版本 ID]/Core Samples/Shared Assets/Prefabs/Interaction/
- 在 XR Interactor 线视觉组件中,将线宽更改为 0.005。

最后,设置 MRTK 配置文件。
- 创建在 Packages > MRTK Core Definitions > Configuration > Default Profiles 中找到的 MRTKProfile 的副本,并将其放入项目 Assets 目录中。

- 打开编辑 > 项目设置 > MRTK3。
- 将副本拖到 Android 选项卡下的配置文件部分。
- 取消选中MRTK Hands Aggregator Subsystem。
- 取消选中 Hand Synthesis 子系统。

可选:添加交互式组件以测试 MRTK 功能
可选择的对象
- 将 3D 立方体添加到场景中。
- 将位置设置为 (0, 0, 1.5)
- 旋转至 (45, 45, 45)
- 缩放至 (0.5, 0.5, 0.5) - 添加组件“ObjectManipulator”以允许从激光笔进行抓取。
MRTK 按钮组
- 通过将 ButtonGroup_32x32mm_H3 预制件添加到场景中来测试 MRTK 预制件交互组件。
- 这可能会提示您安装 TextMeshPro。如果是这样,请选择Import TMP Essentials。
- 在层次结构中选择 ButtonGroup,然后在检查器中将变换位置设置为 0,0,0.5。按Play可处理脚本并可视化按钮面,然后Stop返回“编辑”。
- 展开 ButtonGroup 以找到三个 PressableButton_32x32mm_IconAndText 对象,然后一次展开它们。

- 对于第一个,选择顶级按钮对象,在检查器中找到 Pressable Button 组件,单击+OnClicked(), 将其设置为场景中的 Cube,并将操作设置为 GameObject.SetActive 并取消选中复选框。
- 在子 CompressableButtonVisuals 下:
- 找到 UX.Button.Icon.Char 子对象并将 SpriteRenderer 的 Sprite 更改为空圆圈。 - 对于第二个,选择顶级按钮对象,在检查器中找到 Pressable Button 组件,单击+OnClicked(),将其设置为场景中的 Cube,并将操作设置为 GameObject.SetActive 并选中复选框。
- 在子 CompressableButtonVisuals 下:
- 找到 UX.Button.Icon.Charchild 对象并将 SpriteRenderer 的 Sprite 更改为实心圆。
- 找到 TextMeshPro 子项并将文本输入设置为“显示”。 - 对于第三个按钮,您首先需要创建一个新脚本并将其添加到多维数据集中。该脚本应该具有可公开访问的功能,例如
...
public void Quit() {
Application.Quit();
}
...
- 仍然在第三个按钮上:
- 选择顶级按钮对象,在检查器中找到 Pressable Button 组件,单击+OnClicked(),将其设置为场景中的 Cube,并将新脚本中的操作设置为 Quit()。
- 在子 CompressableButtonVisuals 下:
- 找到 UX.Button.Icon.Char 子对象并将 SpriteRenderer 的 Sprite 更改为 Quite 按钮。
- 找到 TextMeshPro 子项并将文本输入设置为“显示”。

测试设备
- 配置构建设置和播放器设置以构建应用程序。
- 从“构建设置”窗口构建应用程序并在本地保存您的应用程序。
- 连接您的 Android 设备并在出现提示时批准 USB 调试。
- 将 apk 安装到您的设备上。
- 长按应用程序图标,点击“应用程序信息”,然后批准所有权限。
- 插上眼镜,完全加载后,运行应用程序。
MRTK样本
如需进一步了解可用的 MRTK3 用户界面组件,建议下载 MRTK3 示例并针对 Snapdragon Spaces 配置它们。请按照以下步骤执行此操作。
获取 MRTK3 示例
- 克隆存储库或下载 mrtk3 分支:https://github.com/microsoft/MixedRealityToolkit-Unity/tree/mrtk3
- 在具有短文件名的位置提取或克隆此存储库。此存储库有许多名称很长的文件夹,这可能会导致文件名变得太长并导致 Unity 出现问题。
- 不要移动此存储库中的任何文件,因为存在许多依赖项,更改文件的位置会导致问题。如果您需要移动存储库,请完全移动整个存储库。
打开项目并集成 Snapdragon Spaces:
- 从 Unity Hub 的 MRTK3 示例“UnityProjects”文件夹中添加“MRTKDevTemplate”。
- 打开 Unity 项目。
- 按照Unity 设置指南中的说明导入 Snapdragon Spaces 包。
- 选择要打开的场景。推荐场景是 HandInteractionExamples。
- 配置场景以修改相机和输入,如上所示。
- 构建并部署到设备。
手部追踪
笔记
手部追踪需要在目标设备上安装 Snapdragon Spaces Services 0.11.1 或更高版本。为 MRTK 手部追踪构建的应用程序可能无法在装有早期版本 Snapdragon Spaces 服务的设备上按预期运行。
手部追踪插件设置
使用混合现实 OpenXR 插件进行手部跟踪。要获取该插件,请使用混合现实功能工具(见上文)并从平台支持部分选择混合现实 OpenXR 插件。

单击完成更新项目的过程,然后返回到 Unity 项目。
统一配置
在 Unity 中,有两个区域需要更新。
MRTK 设置
第一个是 MRTK 设置。确保 MRTK Hands Aggregator Subsystem 和 Subsystem of OpenXR Hands API 复选框均已启用。

此外,建议尝试校准“捏合关闭阈值”设置,该设置默认设置为 0.25。开发人员发现将该阈值调整为 0.45 或 0.5 取得了一些成功(如图所示)。
OpenXR 设置
第二个要更新的区域是 OpenXR 设置。在这里,启用两个手部跟踪复选框。一种是让 Spaces Hand Tracking 进行跟踪,另一种是让 MRTK 在交互系统中利用手部跟踪。

手部可视化设置
除了 MRTK 提供的手部网格之外,Snapdragon Spaces SDK 还提供了 QCHT 手部网格,用于可视化虚拟手部覆盖。
要实现,请MRTK RightHand Controller在场景层次结构中的 MRTK XR Rig > 摄像机偏移 > MRTK RightHand Controller 下进行选择。
拖动hand_right_qcht位于MRTK RightHand 控制器字段packages/QCHT Unity Interactions/Prefabs/MRTK3/中的预制件Model Prefab
用左手执行相同的过程。
手部追踪选项
笔记
由于与 OpenXR 控制器配置文件冲突,目前无法同时从 Snapdragon Spaces 控制器和双手进行光线投射。因此,有两种选择。
选项 1:禁用左手跟踪
要禁用左手跟踪,请关闭 MRTK XR 装备中的左手控制器,但保留右手控制器。如果您保留左手,它可能仍然可以作为碰撞器工作,但可能无法作为光线投射交互器正常工作。此选项允许继续使用设备指针,但限制可能并不理想。
选项 2:禁用 Snapdragon Spaces 控制器(双手选项)
要禁用 Snapdragon Spaces Controller,请从场景中删除或停用设备指针预制件(如果存在)。
然后从 OpenXR 设置中删除该配置文件。
这将在基本运行时功能旁边标记一个警告,但可以忽略。这允许双手进行跟踪,但手机控制器不会向应用程序发送任何指针跟踪或按钮按下消息,因为它是“仅手部跟踪”模式。这主要推荐用于直接从其他“仅手部跟踪”平台移植应用程序。
MRTK 资源
有关 MRTK 的更多详细信息,请参阅MRTK3 文档 或者查看Github MRTK 项目的源代码