我想知道哪个节点被命中,但是我的方法仅适用于具有SCNBox和SCNFloor等几何形状的节点,但不适用于DAE模型:

- (void) handleTap:(UIGestureRecognizer*)gestureRecognize {

    // retrieve the SCNView
    SCNView *scnView = (SCNView *)self.view;

    // check what nodes are tapped
    CGPoint p = [gestureRecognize locationInView:scnView];
    NSArray *hitResults = [scnView hitTest:p options:nil];

    // check that we clicked on at least one object
    if([hitResults count] > 0) {
        SCNNode *hitNode = ((SCNHitTestResult*)[hitResults objectAtIndex:0]).node;

        if(hitNode == boxNode) {
            NSLog(@"box hit"); //works
        }

        if(hitNode == floorNode) {
            NSLog(@"floor hit"); //works
        }

        if(hitNode == heroNode) {
            NSLog(@"heroNode from .dae hit"); //doesn't work
        }
    }
}

这就是我制作.dae节点(heroNode)的方法:
SCNScene *heroScene = [SCNScene sceneNamed:@"hero" inDirectory:nil options:nil];
heroNode = [heroScene.rootNode childNodeWithName:@"root" recursively:YES];
[scene.rootNode addChildNode:heroNode];

问题出在哪里?

最佳答案

英雄节点没有附加几何图形,但它具有确实具有几何图形的子节点。结果,英雄节点将不会出现在点击测试结果中。

检查hero节点是否是您的hitNode的父级是否有效?

10-08 15:44