多个用户佩戴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
下面展示的示例代码会在开始共享空间锚之前进行一些初始化操作:
Exporting导出
导出分享一个空间锚,我们只需要一个WorldAnchor。具体的操作步骤如下:
1. 创建一个 WorldAnchorTransferBatch
2. 添加传输空间锚对象
3. 开始导出数据
4. 当数据可用时,处理 OnExportDataAvailable事件
5. 处理导出完成事件 OnExportComplete
WorldAnchorTransferBatch对象会将空间锚数据导出为bytes数据:
当导出的数据可用时,将bytes数据发送至客户端或缓冲区,使用任意方法将数据发往另一台设备:
当数据导出完成,如果我们传输或者序列化数据失败,就需要告诉客户端放弃此段错误的数据。如果序列化成功,需要告诉客户端可以使用导入使用此数据:
Importing 导入
设备在接收到bytes数据后,我们同样可以使用WorldAnchorTransferBatch对象将我们的全息对象放置到数据代表的物理位置上。注意:导入有时会出现短暂失败,需要重试:
虽然可以通过导入远程数据,将全息对象固定在与其他用户相同的位置上,但是全息对象在Unity坐标系中位置可能与其他用户不同。
示例:HoloToolkit Sharing
你可以在GitHub上的HoloToolkit-Unity 中使用 Sharing目录下的prefab来集成此特性