结合Azure和HoloLens:混合现实与云计算的融合

将探索如何将微软的两项令人惊叹的技术——Azure云服务和HoloLens混合现实头显——结合起来,创造出令人难以置信的体验。

什么是Microsoft Azure?

Microsoft Azure是一个安全的云解决方案,允许快速构建可扩展的Web应用程序。它易于使用,提供大量可定制的服务,并且在全球50个地区提供服务。

什么是Microsoft HoloLens?

Microsoft HoloLens是一款尖端的混合现实头显,自2016年以来即将迎来其首次重大更新。HoloLens能够映射周围的3D空间,并将全息图投影到眼前,让能够以自然的方式与它们互动。

目标是什么?

回想一下,每个Azure教程中都包含的简单待办事项列表演示。请继续关注,因为将向展示如何在HoloLens上实现这个示例。

将开发一个简单的混合现实应用程序,具有以下功能:

  • 应用程序将从云端获取待办事项列表,并将其显示为全息图。
  • 用户可以通过空中点击来标记待办事项为“完成”。
  • 应用程序将与云端同步并显示更新后的信息。

可以在GitHub上获取源代码。

先决条件

要运行演示,需要一台安装了以下软件的Windows 10电脑:

  • Visual Studio 2017
  • Unity3D
  • Unity3D的Azure SDK
  • Unity3D的混合现实工具包

可以在HoloLens设备或HoloLens模拟器上运行应用程序。

将混合现实带到云端

是时候开始了!假设已经打开了Unity3D和Visual Studio。

如果使用正确的工具,复杂任务可以变得简单。有几个工具将帮助简化流程。

第一个是Unity3D的Azure SDK。Azure SDK是一个Unity插件,允许连接到远程应用服务并更新数据。下载Unity包并将其导入Unity编辑器。

将使用的第二个插件是微软的混合现实工具包。混合现实工具包(以前称为“HoloToolkit”)包括大量的全息控制和界面构建元素,包括光标、空间映射、手势检测等。

Azure SDK和混合现实工具包可以顺利地协同工作。

现在Unity编辑器有了所需的插件,创建一个空场景并添加4个对象:

  • LightBuzz Azure Manager(从GitHub获取)
  • HoloLens Camera(从混合现实工具包获取)
  • 默认光标(同上)
  • 输入管理器(同上)

在现实世界场景中,应该已经部署了Azure服务和数据库。对于演示,为设置了一个Azure服务:

private string mobileAppUri = "https://testtodolightbuzz.azurewebsites.net";

该服务包括一个带有待办事项的虚拟数据库。待办事项由TodoItem C#类表示:

public class TodoItem { [JsonProperty(PropertyName = "id")] public string Id { get; set; } [JsonProperty(PropertyName = "text")] public string Text { get; set; } [JsonProperty(PropertyName = "complete")] public bool Complete { get; set; } }

要获取待办事项,需要创建一个Azure服务客户端,一个Azure服务数据访问对象,以及待办事项的列表:

private LightBuzzMobileServiceClient azureClient; private AppServiceTableDAO todoTableDAO; private List todoItems;

现在可以在Unity的Start()方法中连接到远程服务并获取数据:

// Initialize Azure azureClient = new SampleMobileClient(mobileAppUri, supportLocalDatabase); await azureClient.InitializeLocalStore(); // Retrieve the items from the server todoTableDAO = new AppServiceTableDAO(azureClient); todoItems = await todoTableDAO.FindAll();

提示:Unity3D的Azure SDK还允许将数据存储在本地。这对于开发HoloLens应用程序至关重要,因为互联网连接可能并不总是可用的。因此,能够在设备上存储数据并在稍后与云端同步是一个救星。

现在,数据可以很容易地显示在Unity 3D用户界面中。源代码附带了一个HoloLensClickableElement预制件。HoloLensClickableElement是一个可以使用简单的HoloLens手势与之交互的对象。以下是如何实例化它:

private HoloLensClickableElement tile; for (int i = 0; i < todoItems.Count; i++) { TodoItem item = todoItems[i]; HoloLensClickableElement obj = Instantiate(tile); obj.Setup(item); }

让深入了解HoloLensClickableElement类。如何与3D全息图交互?答案是使用空中点击手势。空中点击是目前在3D空间中“点击”对象的唯一方式。

微软已经做了令人难以置信的工作,将所有必要的功能暴露在一个易于使用的API中。多亏了混合现实工具包,所要做的就是实现IInputClickHandler接口:

public class HoloLensClickableElement : MonoBehaviour, IInputClickHandler { public void OnInputClicked(InputClickedEventData eventData) { Debug.Log("Item Clicked"); } }

再次,可以在GitHub上找到完整的源代码。为了简单起见,在这里没有包括所有的源代码。完整的源代码还包括事件处理程序和聚焦元素的动画。

现在让把所有东西都放在一起:

HoloLensClickableElement监听空中点击手势。

当检测到空中点击手势时,应该将待办事项标记为“完成”。

让扩展HoloLensClickableElement类,包括对待办事项的引用:

public class HoloLensClickableElement : MonoBehaviour, IInputClickHandler { public event EventHandler OnClick; public TodoItem Item { get; set; } public void Setup(TodoItem item) { Item = item; } public void OnInputClicked(InputClickedEventData eventData) { OnClick?.Invoke(this, new EventArgs()); } }

之后,所需要做的就是订阅Clicked事件:

HoloLensClickableElement obj = Instantiate(tile, new Vector3(x, y, z), Quaternion.identity); obj.Setup(item); obj.OnClick += async (sender, e) => { HoloLensClickableElement source = sender as HoloLensClickableElement; await todoTableDAO.Delete(source.Item); };

就是这样!数据库现在已更新。

还有一个最后一步:将应用程序部署到HoloLens设备(或模拟器)。为此,请导航到Unity菜单并选择以下选项:

  • 混合现实工具包 → 配置 → 应用混合现实项目设置

点击“应用”,然后转到文件 → 构建设置来创建UWP项目。耐心等待Unity构建项目。

最后,在Visual Studio中打开生成的项目,连接HoloLens设备,然后点击运行按钮。

有关构建和部署HoloLens项目的完整教程,请参阅关于为UWP构建项目的HoloLens入门文章。

想要成为混合现实和云计算的专家吗?专家从基础开始:

  • 入门教程
  • Azure应用服务入门
  • HoloLens入门
  • Unity3D入门

软件开发工具包(开源):

  • Unity3D的Azure SDK
  • Unity3D的混合现实工具包

更多教程和指南:

  • Unity3DAzureSDK终极指南
  • Unity3D中的语音识别
  • HoloLens的Pokemon Go克隆
  • HoloLens - 最终介绍
  • Azure+ HoloLens源代码
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485