Azure + HoloLens = 云端混合现实!
Azure + HoloLens = 云端混合现实!
据传,微软将在未来几天展示第二代 HoloLens。因此,我想到了将一些全息影像带到大家最喜欢的云端。
我是 LightBuzz 的 Vangos,今天我们将结合两项令人惊叹的微软技术:**Azure** 和 **HoloLens**。
什么是 Microsoft Azure?
Microsoft Azure 是一款安全的云解决方案,可让您快速构建可扩展的 Web 应用程序。它易于使用,提供大量可自定义的服务,并且在全球范围内可用,拥有 全球 50 个区域。
什么是 Microsoft HoloLens?
Microsoft HoloLens 是一款尖端的混合现实头戴设备,自 2016 年以来首次迎来重大更新。HoloLens 会映射您周围的 3D 空间,并在您的眼前投射全息影像,让您能够以自然的方式与它们进行交互。
我们要做什么?
还记得这个简单的待办事项列表演示吗?它是每个 Azure 教程都附带的。敬请期待,因为我将向您展示如何在 HoloLens 上实现这个完全相同的示例。
正如您所见,我们将开发一个具有以下功能的简单混合现实应用程序:
- 该应用程序将从云端获取待办事项列表,并将其显示为全息影像。
- 用户将能够通过空气点击(air-tap)一个待办事项将其标记为“完成”。
- 该应用程序将与云端同步并显示更新后的信息。
必备组件
要运行演示,您需要一台装有以下软件的 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 可以协同工作。
现在 Unity 编辑器已安装所需的插件,请创建一个空场景并添加 4 个对象:
- LightBuzz Azure Manager(从 GitHub 获取)
- HoloLens Camera(从 Mixed Reality Toolkit 获取)
- Default Cursor(同上)
- Input Manager(同上)
第 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 Toolkit → Configure → Apply Mixed Reality Project Settings
单击“Apply”,然后转到 File → Build Settings 创建您的 UWP 项目。请耐心等待 Unity 构建项目。
最后,在 Visual Studio 中打开生成的项目,连接您的 HoloLens
设备,然后单击 Run 按钮。
有关构建和部署 HoloLens 项目的完整教程,请参阅我关于构建 UWP 项目的 HoloLens 入门 文章。
资源
想成为混合现实和云计算方面的专家吗?专家从基础开始。
入门教程
软件开发工具包(开源)
更多教程和指南
- 最终的 Azure SDK for Unity3D
- Unity3D 中的语音识别
- HoloLens 版《Pokémon Go》克隆
- HoloLens - 终极介绍
- Azure + HoloLens 源代码
我要感谢 Georgia Makoudi,他是 Azure SDK for Unity 的作者,他帮助我撰写了这篇文章并完善了演示。
那么,您喜欢这个教程吗?您打算如何结合混合现实和云计算?在下面的评论中告诉我。
下次见,继续编码!