Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何确定ARObjectAnchor已从场景中移除?_Ios_Scenekit_Arkit_Ios13 - Fatal编程技术网

Ios 如何确定ARObjectAnchor已从场景中移除?

Ios 如何确定ARObjectAnchor已从场景中移除?,ios,scenekit,arkit,ios13,Ios,Scenekit,Arkit,Ios13,我试图用ARKit来验证玩具的位置。我有一个ARObject扫描资源,将玩具放在相机视图中效果很好。换句话说,SCNScene和ARSession的diddadd和diddupdate在玩具放置在相机视图后的合理时间内按预期调用。但是当我将玩具从相机视图移开时,didRemove不会被调用,无论是对于SCNScene还是对于ARSession 我确实读过关于这种行为的宣传,说“好吧,它不知道它是否真的被移除了,它可能还只是指日可待”,但这是一个相当不切实际的假设。关于这个功能的整个苹果文档都是“

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

我确实读过关于这种行为的宣传,说“好吧,它不知道它是否真的被移除了,它可能还只是指日可待”,但这是一个相当不切实际的假设。关于这个功能的整个苹果文档都是“ARKit可能会自动删除锚”,但没有说明何时以及为什么。我知道,但是
ARObjectAnchor
似乎是唯一一个没有实现ARTrackable的ARAnchor子类


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

要按名称查找锚点,请使用
init(名称:transform:)
初始化器为锚点指定一个描述性名称:

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

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


苹果TSI的信息解释(如果有人想在自己的TSI中提及此问题,则id 731233593):

当对象离开屏幕时,不一定会删除对象定位点。这不是一种应该依赖的行为。这适用于
AR(SCNView | Session)委托。didrove
回调和
ARFrame.anchors的内容。只有当客户机代码以编程方式删除相关的锚时,才会调用回调。尽管有明确的要求,我还是无法对官方文档行“ARKit可能会自动删除锚”做出更好的解释。“你不必担心为什么会发生这种事。”

didAdd
didUpdate
回调上超时是一种官方方法。
证据用于创建对象扫描、文件
Controllers/TestRun.swift
方法
startNoDetectionTimer
。使用5秒超时

鼓励
ARObjectAnchor
实施
ARTrackable
的需求在以下时间填写增强请求:。我个人被鼓励调查替代方案,发现CoreML出人意料地友好,更适合我的用例


谢谢@Andy把我推到这一步。

谢谢你的回答,但我显然被误解了。我已经澄清了第一章。问题不在于找到锚。ARKit将其命名为与Arbject扫描资源相同的名称,这就足够了。问题是当对象从摄影机视图中物理删除时。ARKit没有提供任何关于此类事件的信息,只是停止为该锚发布didUpdate。不幸的是,
ARFrame.anchors
也不起作用:(尽管是帧的属性,苹果文档称“代表场景中检测到的对象的锚列表”这就是它的实际行为。一旦锚定对象被识别,它将永远挂在数组中,尽管它被移出了摄影机的视线。我们用浮动标签注释了ARAnchor的节点,标签将保留在上次识别对象的位置。有趣的是,如果锚定对象被移动但仍保留在摄影机视图中,则重新定位levant对象节点也会移动,虽然经过了令人失望的长时间。但当它被完全拉走后,对象节点永远只会停留在最后一个已知的位置。沿着
ARFrame.anchors中的锚点。我想我会在这个问题上烧掉一个苹果TSI。你是对的。我正在研究我答案的正确版本。
self.sceneView.session.currentFrame?.anchors.contains { 
    $0.isKind(of: ARObjectAnchor.self)
}