本教程介绍如何在一个会话期间使用 Azure 空间定位点来创建定位点,然后在相同或不同设备上查找它们。 也可由多个设备同时在相同位置查找这些相同的定位点。
Azure 空间定位点是一种跨平台开发人员服务。通过该服务,可以使用能够随时间推移跨设备保存自己位置的对象创建混合的现实体验。 完成后,会具有可以部署到两个或更多设备的应用。 由一个实例创建的 Azure 空间定位点可以共享给其他人。
将了解如何执行以下操作:
在 Azure 中部署可以用于共享定位点(将它们存储在内存中一段时间)的 ASP.NET Core Web 应用。
配置来自快速入门的 Unity 示例中的 AzureSpatialAnchorsLocalSharedDemo 场景,以利用共享定位点 Web 应用。
部署到一个或多个设备并运行。
如果还没有 Azure 订阅,可以在开始前创建一个免费帐户。
先决条件
若要完成本教程,请确保做好以下准备:
通读 Azure 空间定位点概述。
完成 5 分钟快速入门之一。
对 C# 和 Unity 有一个基本的了解。
对 ARCore(若要使用 Android)或 ARKit(若要使用 iOS)有一个基本的了解。
使用“ASP.NET 和 Web 开发”工作负载安装 Visual Studio 2017 或更高版本的 Windows 计算机。
.NET Core 2.2 SDK。
一个或多个要部署和运行应用的设备(iOS 或 Android)。
如果使用的是 Android,则需要:
在 Windows 计算机上安装了 Android Studio 3.3 或更高版本、Unity 2018.3 或更高版本以及 Git for Windows。
支持开发人员和 ARCore 功能的 Android 设备。
如果使用的是 iOS,则需要:
安装了 Xcode 10 或更高版本、 CocoaPods 和 Unity 2018.3 或更高版本的 macOS 计算机。
支持开发人员的 ARKit 兼容 iOS 设备。
通过 Homebrew 安装的 Git。 在终端的单行中输入以下命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)",然后运行 brew install git。
值得注意到,虽然在本教程中会使用 Unity 和 ASP.NET Core Web 应用,不过这只是为了演示有关如何在其他设备间共享 Azure 空间定位点标识符的示例。 可以使用其他语言和后端技术实现相同目的。 此外,本教程中使用的 ASP.NET Core Web 应用依赖于 .NET Core 2.2 SDK。 它可在常规 Azure Web 应用(适用于 Windows)上运行良好,但当前不适用于 Linux 的 Azure Web 应用。
创建空间定位点资源
转到 Azure 门户。
在 Azure 门户的左侧导航窗格中,选择“创建资源”。
使用搜索框以搜索“空间定位点”。
搜索“空间定位点”。 在对话框中,选择“创建”。
在“空间定位点帐户”对话框中:
使用常规字母数字字符输入唯一的资源名称。
选择想要将资源附加到的订阅。
选择“新建”可创建资源组。 将其命名为 myResourceGroup 并选择“确定”。 资源组是在其中部署和管理 Azure 资源(如 Web 应用、数据库和存储帐户)的逻辑容器。 例如,可以选择在使用完之后通过一个简单的步骤删除整个资源组。
选择可在其中放置资源的位置(区域)。
选择“新建”开始创建资源。
创建资源后,Azure 门户将显示部署已完成。 单击“转到资源”。
然后,可以查看资源属性。 将资源的“帐户 ID”值复制到文本编辑器,因为稍后需要用它。
在“设置”下,选择“密钥”。 将“主键”值复制到文本编辑器中。 此值为 Account Key。 稍后需要用到此信息。
在 Unity 中打开示例项目
通过运行以下命令克隆示例存储库:
console
复制
git clone https://github.com/Azure/azure-spatial-anchors-samples.git
部署共享定位点服务
打开 Visual Studio,然后在 Sharing\SharingServiceSample 文件夹中打开项目。
打开发布向导
在“解决方案资源管理器”中,右键单击“SharingService”项目,然后选择“发布”。
“发布向导”启动。 选择“应用服务” > “发布”以打开“创建应用服务”对话框。
登录 Azure
在“创建应用服务”对话框中,选择“添加帐户”,然后登录到你的 Azure 订阅。 如果已登录,请从下拉列表中选择所需的帐户。
备注
如果已经登录,请先不要选择“创建”。
创建资源组
资源组是在其中部署和管理 Azure 资源(如 Web 应用、数据库和存储帐户)的逻辑容器。 例如,可以选择在使用完之后通过一个简单的步骤删除整个资源组。
在“资源组”旁边,选择“新建”。
将资源组命名为 myResourceGroup,然后选择“确定”。
创建应用服务计划
应用服务计划指定托管应用的 Web 服务器场的位置、大小和功能。 可以在托管多个应用时节省资金,方法是将多个 Web 应用配置为共用单个应用服务计划。
应用服务计划定义:
区域(例如:北欧、美国东部或东南亚)
实例大小(小、中、大)
规模计数(1 到 20 个实例)
SKU(免费、共享、基本、标准、高级)
在“托管计划”旁边,选择“新建”。
在“配置托管计划”对话框中,使用以下设置:
设置 建议的值 说明
应用服务计划 MySharingServicePlan 应用服务计划的名称。
位置 美国西部 托管 Web 应用的数据中心。
大小 免费 确定托管功能的定价层。
选择“确定”。
创建并发布 Web 应用
在“应用名称”中,输入唯一的应用名称(有效字符为 a-z、0-9 和 -),或接受自动生成的唯一名称。 Web 应用的 URL 为 https://<app_name>.azurewebsites.net,其中 <app_name> 是应用名称。
选择“创建”开始创建 Azure 资源。
向导完成后,它会将 ASP.NET Core Web 应用发布到 Azure,然后在默认浏览器中打开该应用。
本部分中使用的应用名称将用作 URL 前缀,格式为 https://<app_name>.azurewebsites.net。 请记下此 URL,因为稍后需要。
设置设备
在 Unity 中,打开 Unity 文件夹中的项目。
设置 Android 设备
通过选择“文件” > “生成设置”,打开“生成设置”。
在“平台”部分,选择“Android”。 将“生成系统”更改为“Gradle”,并选择“导出项目”。
选择“切换平台”,以将平台更改为“Android”。 Unity 可能会提示你安装 Android 支持组件(若缺少这些组件)。
关闭“生成设置”窗口。
下载并导入适用于 Unity 的 SDK
从适用于 Unity 1.7 版本的 ARCore SDK 下载 unitypackage 文件。 返回 Unity 项目,选择“资产” > “导入包” > “自定义包”,然后选择之前下载的 unitypackage 文件。 在“导入 Unity 包”对话框中,确保选中所有文件,然后选择“导入”。
设置 iOS 设备
通过选择“文件” > “生成设置”,打开“生成设置”。
在“平台”部分,选择“iOS”。
选择“切换平台”,以将平台更改为“iOS”。 Unity 可能会提示你安装 iOS 支持组件(若缺少这些组件)。
关闭“生成设置”窗口。
下载并导入 Unity ARKit 插件
下载 Unity ARKit 插件版本 2.0.0 并提取存档内容。
将 Assets 文件夹的内容从解压缩的 Unity ARKit 插件文件夹复制到示例的 Assets 文件夹。
配置帐户标识符和密钥
在“项目”窗格中,导航到 Assets/AzureSpatialAnchorsPlugin/Examples 并打开 AzureSpatialAnchorsLocalSharedDemo.unity 场景文件。
下一步是将应用程序配置为使用帐户标识符和帐户密钥。 在设置空间定位点资源时,将它们复制到文本编辑器中。
在“项目”窗格中,导航到 Assets\AzureSpatialAnchorsPlugin\Examples\Resources。 选择 AzureSpatialAnchorsDemoConfig。 然后,在“检查器”窗格中,输入 Account Key 作为 Spatial Anchors Account Key 的值并输入 Account ID 作为 Spatial Anchors Account Id 的值。
在“检查器”窗格中,输入 Sharing Anchors Service url(来自 ASP.NET Web 应用 Azure 部署)作为 Base Sharing Url 的值,并将 index.html 替换为 api/anchors。 它应如下所示: https://<app_name>.azurewebsites.net/api/anchors。
选择“文件” > “保存”,从而保存场景。
部署到设备
部署到 Android 设备
登录 Android 设备并使用 USB 线将其连接到计算机上。
通过选择“文件” > “生成设置”,打开“生成设置”。
在“生成中的场景”下,保证 AzureSpatialAnchorsPlugin/Examples/AzureSpatialAnchorsLocalSharedDemo 场景旁显示勾号,然后清除所有其他场景的勾号。
确保“导出项目”不显示勾号。 单击“生成并运行”。 系统将提示你保存 .apk 文件。 你可为其选择任何名称。
根据应用中的说明操作。 可选择“创建并共享定位标记”或“找到共享定位标记”。 第一个方案是让你创建一个稍后能在相同设备或其他设备上找到的定位标记。 如果已在相同设备或其他设备上运行应用,则第二个方案可让你找到之前共享的定位标记。 在你选取方案以后,应用会通过进一步的说明引导你完成后续步骤。 例如,会要求你四处移动设备以收集环境信息。 随后需在环境中放置一个定位点,等待其上传,以及执行其他操作。
部署到 iOS 设备
通过选择“文件” > “生成设置”,打开“生成设置”。
在“生成中的场景”下,保证 AzureSpatialAnchorsPlugin/Examples/AzureSpatialAnchorsLocalSharedDemo 场景旁显示勾号,然后清除所有其他场景的勾号。
选择“生成”。 在打开的对话框中,选择要将 Xcode 项目导出到的文件夹。
导出完成后,将显示包含所导出 Xcode 项目的文件夹。
备注
如果出现询问是否要替换或追加的窗口,建议选择“追加”,因为它速度更快。 如果要更改场景中的资产,则只需选择“替换”。 (例如,如果要添加、删除或更改父级/子级关系,或者要添加、删除或更改属性。)如果仅更改源代码,“追加”就足够了。
打开 XCode 项目
在导出的 Xcode 项目文件夹中,在终端中运行此命令,为项目安装必要的 CocoaPod:
bash
复制
pod install --repo-update
现在可以打开 Unity-iPhone.xcworkspace 以在 Xcode 中打开项目:
bash
复制
open ./Unity-iPhone.xcworkspace
备注
如果看到 library not found for -lPods-Unity-iPhone 错误,则可能是打开了 .xcodeproj 文件,而没有打开 .xcworkspace 文件。
选择根“Unity-iPhone”节点以查看项目设置,然后选择“常规”选项卡。
在“签名”下,确保已启用“自动管理签名”。 如果未启用,请启用,然后在出现的对话框中选择“启用自动”,以重置生成设置。
在“部署信息”下,确保“部署目标”设置为 11.0。
将应用部署到 iOS 设备
将 iOS 设备连接到 Mac 并将“活动方案”设置为 iOS 设备。
选择“生成并运行当前方案”。
根据应用中的说明操作。 可选择“创建并共享定位标记”或“找到共享定位标记”。 第一个方案是让你创建一个稍后能在相同设备或其他设备上找到的定位标记。 如果已在相同设备或其他设备上运行应用,则第二个方案可让你找到之前共享的定位标记。 在你选取方案以后,应用会通过进一步的说明引导你完成后续步骤。 例如,会要求你四处移动设备以收集环境信息。 随后需在环境中放置一个定位点,等待其上传,以及执行其他操作。
在 Xcode 中,通过选择“停止”来停止应用。
清理资源
在前面的步骤中,在资源组中创建了 Azure 资源。 如果将来不再需要这些资源,可以通过删除资源组来删除它们。
在 Azure 门户的左侧菜单中,选择“资源组”,然后选择“myResourceGroup”。
在资源组页中,确保列出的资源是要删除的资源。
选择“删除”,在文本框中键入 myResourceGroup,然后选择“删除”。
后续步骤
在本教程中,你在 Azure 中部署了 ASP.NET Core Web 应用,然后配置并部署了 Unity 应用。 你使用应用创建了空间定位点,然后使用 ASP.NET Core Web 应用与其他设备共享它们。
若要详细了解如何改进 ASP.NET Core Web 应用,使其使用 Cosmos DB 存储共享的空间定位点标识符,请继续阅读下一教程。 Azure Cosmos DB 将为 ASP.NET Core Web 应用带来持久性。 这样应用就可以在今天创建一个定位点,然后过几天再回来查找它,只需使用存储在 Web 应用中的定位点标识符即可。
教程:使用 Azure Cosmos DB 存储定位点