首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARKit - Cannot解码MCSession中的ARAnchor

ARKit - Cannot解码MCSession中的ARAnchor
EN

Stack Overflow用户
提问于 2018-08-29 18:24:27
回答 2查看 411关注 0票数 5

我正在使用WWDC2018:Creating a multiuser AR experience中引入的ARKit 2.0测试苹果的多用户AR演示应用程序。

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

代码语言:javascript
复制
// can't decode data recieved from peer.

有没有人遇到过这个问题,并且知道它是关于什么的?

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

EN

回答 2

Stack Overflow用户

发布于 2018-09-25 03:49:02

我也遇到了同样的问题,但我还是以这种方式解决了它。

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

变量worldMapHasInited: Bool = false

(2)然后在函数按钮(_shareSession: UIButton)中,将此行添加到下面的末尾

Self.multipeerSession.sendToAllPeers(数据)

self.worldMapHasInited =真

(3)最后在对等函数数据(_:receivedData,from peer: MCPeerID)

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

代码语言:javascript
复制
    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) {
            // ...
    }

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

票数 0
EN

Stack Overflow用户

发布于 2020-06-26 22:22:31

在MultipeerConnectivity ARSession中,多个对等点之间共享数据。但发送和接收的数据必须首先存档,然后使用NSKeyedArchiverNSKeyedUnarchiver类的两个实例方法取消存档:

代码语言:javascript
复制
func archive(worldMap: ARWorldMap) throws {

    let data = try NSKeyedArchiver.archivedData(withRootObject: worldMap,
                                         requiringSecureCoding: true)

    try data.write(to: worldMapURL, options: [.atomic])
}

和:

代码语言:javascript
复制
func unarchive(worldMapData: Data) -> ARWorldMap? {

    guard let unarchievedData = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, 
                                                                           from: worldMapData)
    else { return nil }

    return unarchievedData
}

因此,如果您在Xcode控制台中收到以下消息:

代码语言:javascript
复制
"can't decode data received from peer"

表示传输或解压ARWorldMap数据时出错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52075159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档