多个用户佩戴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来集成此特性
|