世界地图本地化无效。
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])
}
我观察到的一些东西是:
在放置虚拟对象之前,添加了一个锚。
但是放置虚拟对象时不会添加锚点。