Mixed Reality Toolkit-Unity开发系列—Sharing模块

今天要为大家带来的内容是我们在HoloLens开发时,经常使用到的一个开发神器-微软原生开发包Mixed Reality Toolkit-Unity(简称“MRTK”):这是一组脚本和组件集成的开源开发工具包,旨在加速针对用Unity开发Windows的混合现实应用程序。

整个工具包分为九大模块: Sharing,Input,Spatial Mapping,Spatial Sound,UX Controls,Utilities,Spatial Understanding,Build,Boundary,他们各自在MR开发中担任不同的功能。目前最新支持的Unity版本为2017.2.1。

Sharing 模块上手实践

 

本文,我们首先手把手教大家使用Unity制作一个小Demo,帮助大家深入了解MRTK工具包中的Sharing模块。

MixedRealityToolkit.Sharing库允许应用程序跨越多个设备,并启用全息协作。Sharing使用户可以使用多个设备执行任务,允许在每个设备上运行的应用程序通信并保持无缝实时同步。

首先,我们先从GitHub下载对应的工具包(下载链接见文末附录1)。

GitHub对应工具包

下载成功后,我们打开项目,可以看到这时Unity上方Configuration工具栏加载出Mixed Reality Toolkit选项,这其中包含对发布到UWP时的一些参数设置,其中最重要的就是对所发布设备的功能勾选:

配置Other Setting中的Capabilities

这时,还是通过刚才MRTK选项的下拉菜单中点击Launch Sharing Service运行共享服务,将会在您的机器上创建一个新的服务器实例。如下图:

启动服务器

共享会话服务器是一个64位的Win32应用程序,可以在命令提示符下运行或作为Windows服务运行。使用MixedRealityToolkit.Sharing客户端的应用程序可以连接到该服务以发现彼此,共同加入共享Session,并且便于VoIP通信和空间锚定位共享。

此时,检查服务器是否成功打开,若成功打开则会在控制台打印如下图:

服务器开启

需要注意的是:

1.仔细检查您场景中需要连接服务器的地址是否与控制台中显示地址相匹配

2.确保所需要的协同设备都连接到相同的无线局域网

3.确保所有防火墙设置都正确,保证连接不会受限。

接着,就可以把Demo部署到相应设备上来观察了:本文以一个样本场景来剖析协同原理,在Unity中打开SharingTest场景,我们借助两台HoloLens来展示对应的效果。分别部署到两台设备之后,运行程序可以看到控制台打印如图下:

设备成功连接服务器

连接之后,我们可以看到设备加入到网络的构建过程,房间的客户端之间共享的消息内容,如何在客户端之间共享空间锚以及在加入房间的用户头上绘制立方体。动手操作后,我们可以大致了解在MR世界中协同工作的原理。设备在连接后,程序会检测是否有与客户端相匹配的空间锚,如果有则下载并同步位置,如果没有则上传空间锚到服务端,并对其他后加入的设备重复此步骤。最后的Demo效果图如下:

在PC端的Demo展示

Sharing模块的工作机制

 

接下来,让我们从代码层面来解读一下Sharing模块的工作机制,还是以这个场景为例。在RemoteHeadManager.cs脚本中,在Start回调函数里,第一行代码是将消息处理函数绑定到委托上,这个我们在后边展开来讲。此外则是对服务器进行访问连接,将客户端加入和离开房间的方法绑定到一个负责管理应用程序核心网络层的单例脚本SharingStage.cs中。

建立服务器连接并跟踪客户端行为

SharingStage类具有以下职责:

1.服务器配置(地址,端口和客户端角色)

2.建立和管理服务器连接

3.创建并初始化同步数据模型(SyncRoot)

4.创建跟踪服务器上所有会话的ServerSessionsTracker

5.创建跟踪当前会话中的用户的SessionUsersTracker

经过函数内部一系列的逻辑处理之后,服务器会创建和跟踪服务器上的各种会话,当发现连接时,通过SharingStage.cs脚本创建实例,并将与之相关的事件公开出来。此外,还会跟踪当前会话和其中用户的行为,并且也会将所触发的事件暴露。在本例中,所有的事件都会被打印出来,您可以在MR设备中进行查看Log从而获得信息。

完成以上步骤,我们就已经搭好一条与服务器的沟通渠道了。此时,只需要包装一个通用的消息格式,即可进行协同!

在Game视图中,可以看到如果加入一台设备,场景中就会生成一个方块来代表它,并且同步空间位置以及它的旋转角度,做法就是将HoloLens的变换信息实时的通过网络传输来改变方块的transform,我们回到代码中来看一看。

包装消息的函数体

消息包装好之后,就通过广播的形式发送给在房间的各设备。还记得之前提到的绑定消息处理函数吗?当收到消息之后,对应ID的设备将会解析消息,并将它交给之后的函数体处理。

更新方块的 transform

这个函数将会在接收到消息时调用,实时的更新方块的transform。这样,一套简单的协同环境就已经构建好了,接下来,您可以填充更多的逻辑让它变得更有趣。

本篇MRTK-Sharing模块就介绍到这儿,更多细节,请点击文末阅读原文,参考微软官方文档。之后,我们也会持续为大家介绍MRTK其他模块,敬请期待!

附录:

[1] GitHub工具包下载链接:

https://github.com/Microsoft/MixedRealityToolkit

posted @ 2018-05-30 10:46  umlchina  阅读(1393)  评论(0编辑  收藏  举报