ARKit 2:世界地图无法在加载保存的地图时还原虚拟对象

时间:2019-04-01 14:20:04

标签: ios swift arkit

世界地图本地化无效。

sessionDidAddAnchor仅在放置虚拟对象之前被调用一次。

放置虚拟对象并四处移动以获取大多数特征点后,我将WorldMap保存在本地设备上。

let data = try? NSKeyedArchiver.archivedData(withRootObject: worldMap, requiringSecureCoding: true)
if ((try? data?.write(to: url, options: [.atomic])) != nil){
     self.notify(text: "Map stored")
}

在重新启动应用程序时,我正在检索世界地图,并且成功加载了世界地图。并且还添加了锚点,但场景中缺少虚拟对象。

private func retrieveStoredWorldMap(url: URL) throws ->ARWorldMap?{

    guard let mapData = try? Data(contentsOf: url) else {
        return nil
    }

    guard let worldMap = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: mapData) else{
        throw ARError(ARError.Code.invalidWorldMap)
    }    
    return worldMap
}

private func restoreMapAction(){

    let configuration = ARWorldTrackingConfiguration()
    configuration.planeDetection = [.horizontal]
    configuration.isLightEstimationEnabled = true 

    let pathURL = URL(fileURLWithPath: localSavedMapPath)        
    if let existingWorldMap = try? retrieveStoredWorldMap(url: pathURL){     
        configuration.initialWorldMap = existingWorldMap
        notify(text: "Map loaded")
    }

    sceneView.session.run(configuration, options: [.removeExistingAnchors, .resetTracking])

}

我观察到的一些东西是:

在放置虚拟对象之前,添加了一个锚。

但是放置虚拟对象时不会添加锚点。

0 个答案:

没有答案