ARKit 2:从后端重新加载ARWorldMap时,虚拟对象处于浮动状态

时间:2018-07-25 11:11:00

标签: ios swift augmented-reality arkit

我目前正在开发一个可保存和重新加载AR World Maps的应用程序(由于WWDC18上ARKit 2的发布而使之成为可能)。当我检索存储在后端的世界地图并使用重新加载的configuration运行ar会话时,对象会四处漂浮,直到将对象放置在其原始表面上(来自原始会话)。我可以通过隐藏对象来防止此问题,直到可以断言对象anchorsARPlaneAnchors为止,但是在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
                }
            }
        }
    }
}

1 个答案:

答案 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