swift - ARKit – 无法解码 MCSession 中的 ARAnchor

标签 swift augmented-reality arkit multipeer-connectivity world-map

我正在使用 WWDC 2018 中推出的 ARKit 2.0 测试 Apple 的多用户 AR 演示应用程序:Creating a multiuser AR experience .

文档说,在每个设备重新定位到相同的 World Map 之后,只有重新创建每个用户操作所需的信息在设备之间共享(例如,如果用户点击屏幕和 3D 对象出现,只有那个新对象的 ARAnchor 应该被发送到其他设备)。对我来说,虽然它显示了发送设备在捕获和发送世界地图之前放置的所有 3D 角色,但它没有显示发送世界地图后添加的任何对象。我得到的错误是:

// can't decode data recieved from peer.

有没有人遇到过这个问题并且知道它是怎么回事?

我没有更改演示代码中的任何内容。

最佳答案

我遇到了同样的麻烦,但我用这种方式解决了它。

(1)首先创建一个变量来检查世界地图是否已经发送。

var worldMapHasInited: Bool = false

(2)然后在func shareSession(_ button: UIButton)下面添加这一行

self.multipeerSession.sendToAllPeers(数据)

self.worldMapHasInited = true

(3)最后在func receivedData(_ data: Data, from peer: MCPeerID)

检查世界地图是否发送,如果发送则跳过检查数据是否包含世界地图

    if !worldMapHasInited {
        if let worldMap = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: data)
        {
            //....
            // when received world map, set the receiver's 
            // worldMapHasInited to true  
            self.worldMapHasInited = true                                              
        }
    }
    else
        if let anchor = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARAnchor.self, from: data) {
            // ...
    }

这将直接检查数据是否包含 anchor 。

关于swift - ARKit – 无法解码 MCSession 中的 ARAnchor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52075159/

相关文章:

java - 为什么 getAllTrackables 方法只返回一张脸?

ios - 有没有办法为工业增强现实构建 iOS 应用程序?

ios - SceneKit子节点旋转

ios - 通过 HRV 跟踪节拍以节拍心率 Apple Watch

ios - 如何获取 iOS 10 watch 导航栏的颜色和半透明度?

ios - 我可以在 iOS 钥匙串(keychain)中为单个用户存储/检索多个密码吗?

swift - 如何在AR场景运行时提取SceneKit Depth Buffer?

ios - 如何使用 Swift 向此白色和 14px 的 iOS 条形图添加值?

android - Metaio - 基于 3d 模型的跟踪

swift - ARKit Stereo – 是否可以同时运行两个 ARSCNView?