【发布时间】:2018-02-22 11:47:19
【问题描述】:
我有几个被 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
问题是我没有得到可靠的结果。当我点击一个平面时,结果数组总是包含一个对象,但它并不总是一个平面对象(既不是它的父对象),而只是一个 SCNNode。
发生了什么?如何解决这个问题呢 ?
如果您有任何代码可以检测其他飞机中的飞机点击,我很感兴趣!
【问题讨论】:
标签: objective-c xcode scenekit arkit