我正在尝试使用 ARKit 来验证玩具的位置。我有一个 ARObject 扫描资源,将玩具放在相机 View 中效果很好。换句话说,didAdddidUpdateSCNSceneARSession 在玩具放入相机 View 后的合理时间内按预期调用。但是当我将玩具从相机 View 移开时, didRemove 不会调用 而不是 ,无论是 SCNScene 还是 ARSession

我确实阅读了这种行为的主张,说“好吧,ARKit 不知道它是否真的被删除了,它仍然可能即将到来”,但这是相当不切实际的假设。关于此功能的整个 Apple 文档是“ARKit 可能会自动删除 anchor ”,但没有说明何时以及为什么。我知道 isTrackedARObjectAnchor 似乎是唯一没有实现 ARTrackable 的 ARAnchor 子类。

我能想到的唯一绝望的 hack 是当 didUpdate 停止被调用时的某种模糊超时,因为这是删除对象 AFAIK 的唯一效果。我是否忽略了 ARWorldTrackingConfiguration 中的某些内容?请?

最佳答案

要按名称查找 anchor ,请使用 init(name:transform:) 初始化程序为其指定一个描述性名称:

let anchor = ARAnchor.init(name: "ObjAnchor", transform: mtx) as! ARObjectAnchor

self.sceneView.session.currentFrame?.anchors.filter {
     $0.name == "ObjAnchor"
}

要么:
self.sceneView.session.currentFrame?.anchors.contains {
    $0.isKind(of: ARObjectAnchor.self)
}

关于ios - 如何确定 ARObjectAnchor 已从场景中移除?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60435313/

10-12 19:21