Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Objective c ARKit:如何让SCNNode被hitTest命中?_Objective C_Xcode_Scenekit_Arkit - Fatal编程技术网

Objective c ARKit:如何让SCNNode被hitTest命中?

Objective c ARKit:如何让SCNNode被hitTest命中?,objective-c,xcode,scenekit,arkit,Objective C,Xcode,Scenekit,Arkit,我有几架飞机被ARKit检测到,并且用户可以看到 我希望用户能够点击屏幕,以便只保留他选择的平面,更改其颜色并删除其他平面 我的平面添加到didAddNode委托方法中,如下所示: Plane *plane = [[Plane alloc] initWithAnchor: (ARPlaneAnchor *)anchor]; [self.planes setObject:plane forKey:anchor.identifier]; 在另一种方法中,我捕捉到用户的点击,希望能够更改他

我有几架飞机被ARKit检测到,并且用户可以看到

我希望用户能够点击屏幕,以便只保留他选择的平面,更改其颜色并删除其他平面

我的平面添加到didAddNode委托方法中,如下所示:

 Plane *plane = [[Plane alloc] initWithAnchor: (ARPlaneAnchor *)anchor];
    [self.planes setObject:plane forKey:anchor.identifier];
在另一种方法中,我捕捉到用户的点击,希望能够更改他选择的平面的颜色并删除其他平面

以下是我写的:

 CGPoint holdPoint = [recognizer locationInView:self.sceneView];

    NSArray<SCNHitTestResult *> *result = [self.sceneView hitTest:holdPoint
                                                              options:@{SCNHitTestBoundingBoxOnlyKey: @YES, SCNHitTestFirstFoundOnlyKey: @YES}]; 

        if (result.count == 0) {
                    return;
        }

        SCNHitTestResult * hitResult = [result firstObject];

 SCNNode *node = hitResult.node;

 SCNNode *parentNode = node.parentNode; // the geometry being child of my Plane object
CGPoint保持点=[recognizer locationInView:self.sceneView];
NSArray*结果=[self.sceneView hitTest:holdPoint
选项:@{SCNHitTestBoundingBoxOnlyKey:@YES,SCNHitTestFirstFoundOnlyKey:@YES}];
如果(result.count==0){
返回;
}
SCNHITESTRESult*hitResult=[result firstObject];
SCNNode*node=hitResult.node;
SCNNode*parentNode=node.parentNode;//几何体是平面对象的子对象
问题是我没有得到一个可靠的结果。单击平面时,结果数组始终包含一个对象,但它并不总是平面对象(也不是其父对象),而只是SCNNode

发生了什么事?如何解决这个问题


如果你有任何代码工作,以检测点击一个平面之间的其他飞机,我很感兴趣

如果你想要完美的结果,你使用的选项似乎过于宽松

默认值为“否”,指定命中测试搜索应针对节点几何体进行测试。为此选项指定“是”会提高搜索性能,但会牺牲几何精度。

默认值为否,指定命中测试应返回找到的所有对象。如果指定“是”,则命中测试结果数组仅包含找到的第一个对象(不一定是最近的对象)


即使我对两个参数都使用“否”,也无法得到可靠的结果。。。通常,当我单击一个平面时,不会检测到任何平面。我不明白为什么。有时,当我在某个平面的某个位置单击两次时,它首先被检测到,然后再也检测不到(或相反)。我不明白!