设置和运行 WLT+ASA 示例

总结

World Locking Tools for Unity (WLT) 基于本地跟踪提供稳定的坐标系。 与 Azure 空间定位点 (ASA) 结合时,该稳定的坐标系可跨会话持久保留和跨设备共享。

此视频可用于了解运行示例时会发生的情况。

此示例中包含什么内容?

此示例提供资产和脚本,用于:

  1. 配置相对于物理环境的 Unity 全局坐标系。
  2. 使用 Azure 空间定位点将坐标系配置发布到 Azure。
  3. 从 Azure 检索数据,以在以后的会话中或其他设备上还原坐标系。

本文档的结构

  1. 设置 - 如何安装和部署示例应用程序。
  2. 有关运行应用程序的说明以及建议的步骤。
  3. 支持脚本的体系结构说明。

设置和测试的版本

此示例已使用以下各项进行开发和测试:

  • Unity 2020.3.8f1
  • Azure 空间定位点 (ASA) v2.9.0 - v2.10.2
  • 混合现实工具包 v2.7.2
  • World Locking Tools for Unity v1.4.1
  • FrozenWorldEngine v1.1.1

可以从 WLT 版本 .unitypackage 或混合现实功能工具安装 WLT 和此示例。 如果从 FeatureTool 安装,则不仅必须安装 WLT 示例依赖项(自动),还必须将示例导入项目中。 有关详细信息,请参阅从 MR 功能工具安装 WLT

将 Frozen World 引擎 DLL 安装到项目中

第一步是安装 Frozen World 引擎 DLL v1.1.1。 此处的说明,使用 NuGet For Unity 或命令行 nuget.exe。

安装 ASA

创建空间定位点资源

快速入门指南介绍了创建 Azure 帐户和必要的空间定位点资源的步骤。 运行示例需要帐户 ID、帐户域和帐户密钥。 你需要将它们添加到场景中 SpacePinBinder 对象的“空间定位点管理器”脚本上的适当字段中。 支持其他身份验证方法,但帐户 ID/域/密钥是入门的最简单方法。

凭据字段

安装 SDK

接下来,按照这些说明中所述的方法之一安装 Azure 空间定位点 v2.9.0。 我使用了 MR 功能工具方法。

粗略重定位的其他设置

使用粗略重定位时,部署到 Android 或 HoloLens2 时需要执行额外的设置。

什么是粗略重定位?

粗略重定位是一种用于在当前邻近范围内搜索先前创建的云定位点的技术。 有关粗略重定位的详细信息,请参阅 Azure 空间定位点文档的“粗略重定位”部分

此示例演示如何通过粗略重定位查找云定位点,或者如何根据云定位点 ID (GUID) 进行显式查找。 如果启用了粗略重定位,则还需要执行以下额外的设置步骤。 如果对粗略重定位不感兴趣,可以在 SpacePinBinder 对象的“Publisher ASA”组件中禁用它。

禁用粗糙重定位

针对 HoloLens2 的其他设置步骤

若要在 HoloLens2 上启用粗略重定位,必须向生成到 ARM/WorldLockingTools/Package.appxmanifest 的 Package.appxmanifest 文件添加权限(假定你选择了文件夹 ARM 作为生成目标)。 如果此项目是你自己的项目,请替换该路径中 WorldLockingTools 的相应名称。 将以下行添加到“功能”部分:

    <DeviceCapability Name="wiFiControl"/>

有关详细信息,请参阅 Github 上的此文章

如果错过此步骤,发布者“就绪性”永远不会达到“就绪”状态,帧率将非常低,UnityPlayer.log(如果生成)会充满以下形式的异常:

InvalidOperationException:CoarseReloc:WiFi 访问已被拒绝。 请求 CV:。 响应 CV:。

每次从头开始构建解决方案时,都需要将该功能添加到你的 Package.appxmanifest。 但 Unity 的后续生成将保留该功能。

在项目设置/XR 插件管理中,确保“Windows Mixed Reality”是“UWP”选项卡下的所选插件提供程序(OpenXR 也支持 WLT 与 ASA)。

XAmpleApp/CustomProfiles 中的 MRTK 配置文件 XAmple XRSDK ToolkitConfigurationProfile 适用于在 HoloLens2 上运行。

针对 Android 的其他设置步骤

若要在 Android 上启用粗略重定位,请按照这些说明配置 Assets/Plugins/Android/mainTemplate.gradle 文件。

此外,在 Assets/Plugins/Android/AndroidManifest.xml 中,必须启用许多权限才能允许在 Android 上访问 Wi-Fi。 同样,如果将此项目的元素合并到你自己的项目中,则还需要执行这些步骤才能使用粗略重定位。 有关在 Android 上访问 Wi-Fi 所需权限的更多详细信息,请参阅此文章及其链接到的文章。

已修改的 mainTemplate.gradle 和 AndroidManifest.xml 示例包含在 WLT-ASA 示例项目中,该示例专为同时使用 WLT 和 ASA 而配置。 按照说明,在播放器发布设置中启用“自定义主清单”和“自定义主 Gradle 模板”之后,它们可以直接复制到你的项目中

点击“生成并运行”时,如果生成失败,且 MRTK_Standard 材料中出现着色器错误,只需再次尝试“生成并运行”。 我在第二次尝试时成功。 MRTK 问题中有一些相关信息,但据我所知,所有信息都是不正确的。

在项目设置/XR 插件管理中,确保“ARCore”是“Android”选项卡下选择的插件提供程序。

MRTK 配置文件 XAmple AR ToolkitConfigurationProfile 适用于在移动设备上运行。 切换到 Android 或 iOS 后,请不要忘记运行脚本 Mixed Reality/Utilities/UnityAR/Update Scripting Defines

按钮功能

就绪

  • 切换大头针 - 当 SpacePin 未处于活动状态时,可能会隐藏其操纵图柄。
  • 发布 - 保存当前配置,在以后的会话中或其他设备上启用其检索。
  • 加载 Oracle - 使用以前存储的绑定还原空间配置。
  • 清除 Oracle - 删除所有后备资源,尤其是 Azure 空间定位点,并清除绑定 oracle。
  • 搜索 - 在最邻近区域中查找所有 Azure 空间定位点,然后从这些定位点还原空间配置。
  • 清除 - 查找最邻近区域的所有 Azure 空间定位点,并清除它们。
  • 重置大头针 - 撤消任何空间大头针操作。 不要清除任何 Azure 空间定位点。

移动设备上的菜单形式略有不同,但按钮位置和含义是相同的。

演练 - 从 HoloLens2 发布

使用 SpacePin 放置场景

启动示例时,坐标系的位置和方向取决于启动时的头跟踪器姿势。 也就是说,它完全是任意的。 首先,将坐标系调整为所需的参考状态。

PinTestSofa 场景中的沙发长 2.18 米,高 0.78 米,深 1.0 米。 因此,沙发顶部靠背两端的 SpacePin 图柄相距 2.18 米,离地 0.78 米。 建议在间隔 2.18 米的某个方便高度测量和放置临时标记。 或者,可以调整场景以适应物理空间。

生成应用程序并将其部署到 HoloLens2 设备后,请等待浮动菜单上的状态显示“就绪”(提示 - 准备就绪后,状态行将从红色变为白色)。

未就绪

一次一个,抓取每个 SpacePin 图柄(白色线框球体)并拖动到相对于参考标记的位置。

在相应位置释放每个标记后,场景应已移动,以相对于 SpacePin 还原沙发背面。 场景中的对象不会移动,整个坐标空间会进行调整,以便 SpacePin 的原始坐标位于你将它们拖动到的物理世界的位置。

发布坐标空间

建立所需空间后,即可发布该空间,使其在后续会话中和其他设备上可用。

如果使用粗略重定位,建议此时清除以前创建的任何云定位点。 点击“从搜索中清除”按钮并等待操作完成。

现在,在浮动菜单上点击“发布”按钮,并等待其完成。

就绪

演练 - 使用粗略重定位从 HoloLens2 使用

在其他 HoloLens2 设备重启应用程序,或在关闭上一个会话后,在同一设备上重启应用程序。 当状态显示为“就绪”时,请按“从搜索加载”按钮。 操作完成后,Unity 全局坐标系将会重新与你的物理环境对齐,就像在先前(已发布)的会话中一样。

演练 - 使用 IBindingOracle (SpacePinBinderFile) 从 HoloLens2 使用

在设备上发布绑定时,或从搜索中还原绑定时,它们将记录到 IBindingOracle 中。 此示例包括最基本的 Oracle,它只是将绑定写入文本文件。

将应用程序重启到新的会话。 如果这与先前执行发布时的 HoloLens2 相同,则发布时会留下一个绑定文件。 如果这是一个不同的 HoloLens2,但在上一个会话中成功执行了搜索,则会留下一个绑定文件。

点击“从文件加载”按钮以加载以前记录的绑定并还原该坐标空间。

演练 - 使用粗略重定位从 Android 使用

UX 的外观在 Android 上略有不同,但工作原理完全相同。 主要区别在于,在 ASA 准备好继续之前,相对于 HoloLens2,需要在启动时对环境进行更多扫描。

当系统显示为“就绪”时,可以按蓝色按钮(从右数第三个按钮)来搜索以前发布的绑定并还原坐标系。

演练 - 使用 IBindingOracle (SpacePinBinderFile) 从 Android 使用

已成功完成从搜索加载,设备上已留有一个绑定文件。 在后续会话中,只需点击“从文件加载”即可还原坐标系。

或者,只需将绑定文本文件从发布设备复制到使用设备。 绑定文本文件的默认位置为:

HoloLens2:User Folders/LocalAppData/WLT-ASA/LocalState/BinderFile.txt

Android:Internal shared storage/Android/data/com.WorldLockingTools.WLTASA/files/BinderFile.txt

另请参阅