Hololens-Unity全息体验共享(转)

多个用户佩戴HoloLens就可以使用全息体验共享特性来获取集合视野,并且,可以与固定在空间中某个位置的同一全息对象进行交互操作。这些都是通过空间锚共享来实现的。

为了在应用中使用空间锚共享,必须要在AppxManifest文件中启用SpatialPerception性能。

空间锚共享

命名空间:UnityEngine.VR.WSA.Sharing

类型:WorldAnchorTransferBatch

分享一个WorldAnchor,必须建立空间锚共享。在HoloLens扫描空间环境后,用户可以通过手动或者编程来选择建立一些空间锚来共享场景。空间锚对象的信息的可以被序列化并传输分享给其他HoloLens设备,每一个设备都可以反序列化这些信息,并可以在空间中定位到此空间锚的位置。为了确保空间锚分享能起作用,每个设备都需要扫描周边足够的空间,使得空间锚代表的点能在空间中被正确识别。

设置SpatialPerception性能

为了使应用能够使用空间映射数据,SpatialPerception性能必须被启用。

可以通过使用以下步骤开启该功能:

1. 在Unity编辑器中,进入Player Settings选项(Edit > Project Settings > Player)

2. 点击Window Store选项卡

3. 展开Publish Settings选项,并在Capabilities列表勾选SpatialPerception选项

注意:如果你已经把Unity项目导出为Visual Studio项目,你需要重新导出修改后的项目到新文件夹或者手动在Visual Studio中修改AppxManifest应用清单。

Setup

下面展示的示例代码会在开始共享空间锚之前进行一些初始化操作:

Hololens-Unity全息体验共享(转)_第1张图片

Exporting导出

导出分享一个空间锚,我们只需要一个WorldAnchor。具体的操作步骤如下:

1. 创建一个 WorldAnchorTransferBatch

2. 添加传输空间锚对象

3. 开始导出数据

4. 当数据可用时,处理 OnExportDataAvailable事件

5. 处理导出完成事件 OnExportComplete

WorldAnchorTransferBatch对象会将空间锚数据导出为bytes数据:

Hololens-Unity全息体验共享(转)_第2张图片

当导出的数据可用时,将bytes数据发送至客户端或缓冲区,使用任意方法将数据发往另一台设备:

当数据导出完成,如果我们传输或者序列化数据失败,就需要告诉客户端放弃此段错误的数据。如果序列化成功,需要告诉客户端可以使用导入使用此数据:

Hololens-Unity全息体验共享(转)_第3张图片

Importing 导入

设备在接收到bytes数据后,我们同样可以使用WorldAnchorTransferBatch对象将我们的全息对象放置到数据代表的物理位置上。注意:导入有时会出现短暂失败,需要重试:

Hololens-Unity全息体验共享(转)_第4张图片

虽然可以通过导入远程数据,将全息对象固定在与其他用户相同的位置上,但是全息对象在Unity坐标系中位置可能与其他用户不同。

示例:HoloToolkit Sharing

你可以在GitHub上的HoloToolkit-Unity 中使用 Sharing目录下的prefab来集成此特性

你可能感兴趣的:(Hololens-Unity全息体验共享(转))