你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在会话和设备间共享空间定位点

Azure 空间定位点是一种跨平台开发人员服务,通过该服务,你可以使用能够随时间推移跨设备保存自己位置的对象创建混合的现实体验。

在本教程中,你将在一个会话期间使用 Azure 空间定位点来创建定位点,然后在相同或不同设备上查找它们。 也可由多个设备同时在相同位置查找相同的定位点。

Animation showing spatial anchors that are created with a mobile device and used with a different device over the course of days.

本教程介绍以下操作:

  • 在 Azure 部署可用于共享定位点的 ASP.NET Core Web 应用,并在指定的时间段内将定位点存储在内存中。
  • 配置来自快速入门的 Unity 示例中的 AzureSpatialAnchorsLocalSharedDemo 场景,以利用共享定位点 Web 应用。
  • 将定位点部署到一个或多个设备并运行。

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

先决条件

开始本教程之前,请确保已满足以下先决条件:

  • 请参阅 Azure 空间定位点概述
  • 完成 5 分钟快速入门之一。

    注意

    Android/NDK 和 iOS/Swift 快速入门目前并未展示本教程中介绍的功能。

  • 以下任何一项的基本知识:
    • ARCore(如果使用的是 Android)。
    • ARKit(如果使用的是 iOS)。
  • Visual Studio 2019 和更高版本的 Windows 计算机,以及 ASP.NET 和 Web 开发工作负载。
  • .NET Core 3.1 SDK
  • 以下一个或多个要部署和运行应用的设备:HoloLens、HoloLens 2、iOS 或 Android。

注意

在本教程中会使用 Unity 和 ASP.NET Core Web 应用,不过此处的方法只是为了提供有关如何在其他设备间共享 Azure 空间定位点标识符的示例。 可以使用其他语言和后端技术实现相同目的。

创建空间定位点资源

转到 Azure 门户

在左窗格中,选择“创建资源”。

使用搜索框以搜索“空间定位点”。

Screenshot showing the results of a search for Spatial Anchors.

选择“空间定位点”,然后选择“创建” 。

在“空间定位点帐户”窗格中,执行以下操作:

  • 使用常规字母数字字符输入唯一的资源名称。

  • 选择想要将资源附加到的订阅。

  • 选择“新建”可创建资源组。 将其命名为 myResourceGroup,然后选择“确定” 。

    资源组是在其中部署和管理 Azure 资源(例如 Web 应用、数据库和存储帐户)的逻辑容器。 例如,可以选择在使用完之后通过一个简单的步骤删除整个资源组。

  • 选择可在其中放置资源的位置(区域)。

  • 选择“创建”开始创建资源。

Screenshot of the Spatial Anchors pane for creating a resource.

创建资源后,Azure 门户显示部署已完成。

Screenshot showing that the resource deployment is complete.

选择“转到资源”。 你现在可以查看资源属性。

将资源的“帐户 ID”值复制到文本编辑器中,供稍后使用。

Screenshot of the resource properties pane.

另外,将资源的“帐户域”值复制到文本编辑器中,供稍后使用。

Screenshot showing the resource's account domain value.

在“设置”下,选择“访问密钥” 。 将“帐户密钥”的“主密钥”值复制到文本编辑器中,供稍后使用 。

Screenshot of the Keys pane for the account.

下载示例项目 + 导入 SDK

克隆示例存储库

通过运行以下命令克隆示例存储库

git clone https://github.com/Azure/azure-spatial-anchors-samples.git
cd ./azure-spatial-anchors-samples

导入 ASA SDK

按照此处的说明下载并导入 HoloLens 平台所需的 ASA SDK 包。

部署共享定位点服务

注意

在本教程中,我们将使用 Azure 应用服务的免费层。 免费层将在非活动状态 20 分钟后超时并重置内存缓存。

打开 Visual Studio,然后打开 Sharing\SharingServiceSample 文件夹中的项目。

打开发布向导

在“解决方案资源管理器”中,右键单击“SharingService”项目,然后选择“发布...”。

“发布向导”启动。

  1. 选择目标“Azure”>“下一步”。
  2. 选择特定目标“Azure 应用服务(Windows)”>“下一步”
  3. 登录到 Azure 门户。
  4. 选择绿色“+”以“创建 Azure 应用服务”

应用服务设置

设置 建议值 说明
名称 myASASharingService 为服务提供唯一名称
订阅名称 选择首选 Azure 订阅
资源组 myResourceGroup 或选择现有组 资源组是在其中部署和管理 Azure 资源(例如 Web 应用、数据库和存储帐户)的逻辑容器。 例如,可以选择在使用完之后通过一个简单的步骤删除整个资源组。
托管计划 选择“新建...”,并查看下表 应用服务计划指定托管应用的 Web 服务器场的位置、大小和功能。 可以在托管多个应用时节省资金,方法是将多个 Web 应用配置为共享一个应用服务计划。应用服务计划定义:
  • 区域(例如:北欧、美国东部或东南亚)
  • 实例大小(小、中、大)
  • 规模计数(1 到 20 个实例)
  • SKU(免费、共享、基本、标准、高级)

托管计划设置

设置 建议值 说明
托管计划 MySharingServicePlan 为托管计划提供唯一名称
位置 美国西部 托管 Web 应用的数据中心。 选择最靠近使用应用程序的物理位置的位置
大小 免费 确定托管功能的定价层
  1. 选择“创建”以创建应用服务
  2. 创建应用服务后,在“应用服务实例”列表中选择它,然后选择“完成”
  3. 在“SharingService: 发布”选项卡上,选择“发布”

ASP.NET Core Web 应用发布到 Azure 后,你可以转到 https://<your_app_name>.azurewebsites.net,或是在“SharingService: 发布”选项卡上单击“站点:”旁的链接。将此 URL 复制到文本编辑器,以便稍后使用。

Screenshot of a published ASP.NET web app in Azure.

配置 + 部署示例应用

打开项目

在 Unity 中,打开 Unity 文件夹中的项目。 Unity 可能会提示项目使用的版本和计算机上安装的版本有所不同。 只要你的 Unity 编辑器版本比创建项目时所用的版本新,就可以忽略这个警告。 如果你的版本较新,请选择“继续”。 如果你的版本比项目所需的版本旧,请选择“退出”,并升级 Unity 编辑器。

Screenshot of the Unity pane.

设置生成设置

通过选择“文件”>“生成设置”,打开“生成设置” 。

在“平台”部分中,选择“通用 Windows 平台” 。 将“目标设备”更改为“HoloLens” 。

选择“切换平台”,将平台更改为“通用 Windows 平台” 。 Unity 可能会提示你安装 UWP 支持组件(若缺少这些组件)。

Screenshot of the Unity Build Settings pane - HoloLens

关闭“生成设置”窗口 。

配置帐户信息

接下来是将应用配置为使用你的帐户信息。 你之前已在“创建空间定位点资源”部分中,将“帐户密钥”、“帐户 ID”和“帐户域”值复制到文本编辑器中 。

在“项目”窗格中,转到 Assets\AzureSpatialAnchors.SDK\Resources

选择“SpatialAnchorConfig”。 在“检查器”窗格中,输入 Account Key 作为“空间定位点帐户密钥”的值,输入 Account ID 作为“空间定位点帐户 ID”的值,然后输入 Account Domain 作为“空间定位点帐户域”的值 。

通过在项目窗格中双击,来打开 Assets/AzureSpatialAnchors.Examples/Scenes/AzureSpatialAnchorsLocalSharedDemo 中名为 AzureSpatialAnchorsLocalSharedDemo 的场景

在“项目”窗格中,转到 Assets\AzureSpatialAnchors.Examples\Resources

选择“SpatialAnchorSamplesConfig”。 然后,在“检查器”窗格中,输入 Sharing Anchors Service URL(来自 ASP.NET Web 应用 Azure 部署)作为 Base Sharing Url 的值。 使用 /swagger/api/anchors 附加 URL。 它应如下所示: https://<your_app_name>.azurewebsites.net/swagger/api/anchors

选择“文件”>“保存”,从而保存场景 。

导出 + 部署 HoloLens 应用程序

通过选择“文件”>“生成设置”,打开“生成设置” 。

在“生成中的场景”下,确保所有场景旁边都有复选标记。

选择“生成” 。 在对话框中,选择一个文件夹,在其中导出 HoloLens Visual Studio 项目。

导出完成后,将显示包含导出的 HoloLens 项目的文件夹。

在文件夹中,双击 HelloAR U3D.sln 以在 Visual Studio 中打开项目 。

将“解决方案配置”更改为“发布”,将“解决方案平台”更改为 x86,并从部署目标选项中选择“设备” 。

如果使用 HoloLens 2,请使用“ARM64”作为“解决方案平台”,而不是“x86” 。

Visual Studio configuration

打开 HoloLens 设备,登录并使用 USB 电缆将设备连接到电脑。

选择“调试”>“开始调试”以部署应用并开始调试 。

运行应用

在应用中,使用箭头选择“LocalSharedDemo”,然后按“开始!”按钮以运行演示。 按说明放置并重新调用定位点。

利用“创建并共享定位点”,可以创建定位点并将其保存到共享服务中。 反过来,你又将获得定位点的标识符,可用于从共享服务中检索该定位点。 然后,可以在自己的设备或其他设备上运行第二种方案:查找共享定位点。

利用“查找共享定位点”,可以通过输入前面提到的标识符来找到先前共享的定位点。 在你选取方案以后,应用会通过进一步的说明为你提供指导。 例如,会要求你四处移动设备以收集环境信息。 随后需要在环境中放置一个定位点,等待其保存,开始新的会话,然后找到该定位点。

清理资源

在前面的步骤中,你在资源组中创建了 Azure 资源。 如果将来不再需要这些资源,可以通过删除资源组来删除它们。

从 Azure 门户菜单或“主页”页上,选择“资源组” 。 然后,在“资源组”页上,选择“myResourceGroup” 。

在“myResourceGroup”页中,确保列出的资源是要删除的资源。

选择“删除资源组” ,在文本框中键入“myResourceGroup” 以确认,然后选择“删除” 。

后续步骤

在本教程中,你在 Azure 中部署了 ASP.NET Core Web 应用,还配置并部署了 Unity 应用。 你使用应用创建了空间定位点,然后使用 ASP.NET Core Web 应用与其他设备共享它们。

可以改进 ASP.NET Core Web 应用,使其使用 Azure Cosmos DB 来保存共享的空间定位点标识符的存储。 通过添加 Azure Cosmos DB 支持,你可以让 ASP.NET Core Web 应用立即创建定位点。 然后,通过使用存储在 Web 应用中的定位点标识符,你可以让应用在几天后返回以再次找到定位点。