我目前正在开发一个可保存和重新加载AR World Maps的应用程序(由于WWDC18上ARKit 2的发布而使之成为可能)。当我检索存储在后端的世界地图并使用重新加载的configuration运行ar会话时,对象会四处漂浮,直到将对象放置在其原始表面上(来自原始会话)。我可以通过隐藏对象来防止此问题,直到可以断言对象anchors是ARPlaneAnchors为止,但是在Apple将beta 4更新发布到iOS之后,该方法不再起作用了。更新了ARKit SDK。其他人是否遇到过此问题和/或找到了解决方案?
以下是解决此问题的代码:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
if let _ = anchor as? ARPlaneAnchor {
for object in self.virtualObjectLoader.loadedObjects {
if object.modelName == anchor.name {
DispatchQueue.main.async {
object.isHidden = false
}
}
}
}
}
答案 0 :(得分:0)
要在什么时候将对象添加到场景中(在重新定位期间)?我想你太快了。
此外,我发现在对象周围添加多个ARAnchor有助于“滑动/移动”某些功能。
ARWorldMaps具有一个ARAnchor数组,它将在重新定位期间添加到您的场景中,我已将这些锚点之一分配为对象的锚点,一旦看到它们被放置在renderer:didAddNode:ForAnchor中,便会添加带有该锚点的对象
guard let object = items.filter({ (item) -> Bool in
return item.anchor == anchor
}).first else { return }
// Then add the object