65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure + HoloLens = 云端混合现实!

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2019 年 2 月 25 日

CPOL

5分钟阅读

viewsIcon

5941

Azure + HoloLens = 云端混合现实!

据传,微软将在未来几天展示第二代 HoloLens。因此,我想到了将一些全息影像带到大家最喜欢的云端。

我是 LightBuzz 的 Vangos,今天我们将结合两项令人惊叹的微软技术:**Azure** 和 **HoloLens**。

什么是 Microsoft Azure?

Microsoft Azure 是一款安全的云解决方案,可让您快速构建可扩展的 Web 应用程序。它易于使用,提供大量可自定义的服务,并且在全球范围内可用,拥有 全球 50 个区域

什么是 Microsoft HoloLens?

Microsoft HoloLens 是一款尖端的混合现实头戴设备,自 2016 年以来首次迎来重大更新。HoloLens 会映射您周围的 3D 空间,并在您的眼前投射全息影像,让您能够以自然的方式与它们进行交互。

我们要做什么?

还记得这个简单的待办事项列表演示吗?它是每个 Azure 教程都附带的。敬请期待,因为我将向您展示如何在 HoloLens 上实现这个完全相同的示例。

正如您所见,我们将开发一个具有以下功能的简单混合现实应用程序:

  • 该应用程序将从云端获取待办事项列表,并将其显示为全息影像。
  • 用户将能够通过空气点击(air-tap)一个待办事项将其标记为“完成”。
  • 该应用程序将与云端同步并显示更新后的信息。

在 GitHub 上获取源代码.

必备组件

要运行演示,您需要一台装有以下软件的 Windows 10 计算机:

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

将混合现实带入云端

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

第 0 步 - 设置开发环境

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

第一个是 Azure SDK for Unity3D。Azure SDK 是一个 Unity 插件,允许我们连接到远程 App Service 并更新数据。下载 Unity 包并将其导入 Unity 编辑器。

我们将使用的第二个插件是微软的 Mixed Reality Toolkit。Mixed Reality Toolkit(以前称为“HoloToolkit”)包含大量全息控件和界面构建元素,包括光标、空间映射、手势检测等。

Azure SDK 和 Mixed Reality Toolkit 可以协同工作。

LightBuzz Azure SDK for Unity3D - HoloLens

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

  • LightBuzz Azure Manager(从 GitHub 获取)
  • HoloLens Camera(从 Mixed Reality Toolkit 获取)
  • Default Cursor(同上)
  • Input Manager(同上)

Azure HoloLens – Unity Editor

第 1 步 - 从云端获取数据

在实际场景中,您应该已经部署了 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<TodoItem> todoTableDAO;
private List<TodoItem> todoItems;

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

// Initialize Azure
azureClient = new SampleMobileClient(mobileAppUri, supportLocalDatabase);
await azureClient.InitializeLocalStore();

// Retrieve the items from the server
todoTableDAO = new AppServiceTableDAO<TodoItem>(azureClient);
todoItems = await todoTableDAO.FindAll();

提示:Azure SDK for Unity3D 还允许您将数据本地存储。这在开发 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);
}

第 2 步 - 与全息影像交互

让我们更深入地了解 HoloLensClickableElement 类。您如何与 3D 全息影像交互?答案是使用空气点击(air-tap)手势。空气点击(air-tap)是目前在 3D 空间中“单击”对象的唯一方法。

微软在将所有必要功能暴露为易于使用的 API 方面做得非常出色。借助 Mixed Reality Toolkit,我们只需要实现 IInputClickHandler 接口

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

同样,您可以在 GitHub 上找到完整的源代码。为了简洁起见,我在这里不包含所有源代码。完整的源代码还包括用于聚焦元素的事件处理程序和动画。

第 3 步 - 更新云端

现在让我们将所有内容整合在一起。

  • HoloLensClickableElement 侦听空气点击(air-tap)手势。
  • 检测到空气点击(air-tap)手势时,我们应该将待办事项标记为“Done”。

让我们扩展 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);
};

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

第 4 步 - 将应用程序部署到 HoloLens

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

Mixed Reality ToolkitConfigureApply Mixed Reality Project Settings

Unity3D Mixed Reality Project Settings

单击“Apply”,然后转到 FileBuild Settings 创建您的 UWP 项目。请耐心等待 Unity 构建项目。

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

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

资源

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

入门教程

软件开发工具包(开源)

更多教程和指南

我要感谢 Georgia Makoudi,他是 Azure SDK for Unity 的作者,他帮助我撰写了这篇文章并完善了演示。

那么,您喜欢这个教程吗?您打算如何结合混合现实和云计算?在下面的评论中告诉我。

下次见,继续编码!

该帖子 Azure + HoloLens = 云中的混合现实! 出现在 Vangos Pterneas

© . All rights reserved.