3

これは私の問題です。次の階層を持つオブジェクトを Maya で作成しました。

bigButton
   | 
   |--  redDome
   |       |
   |       |-- polySurface1
   |       |__ polySurface2
   |
   |--  greenDome
          |
          |-- polySurface3
          |__ polySurface4

それを DAE に変換して SceneKit にインポートします。Xcode によってさらに 2 つのノードが階層に追加されます。階層は次のようになりました。

bitButton Reference
   |
   |_ referenceRoot
          |
          |
          |__ bigButton 
                   | 
                   |--  redDome
                   |       |
                   |       |-- polySurface1
                   |       |__ polySurface2
                   |
                   |--  greenDome
                           |
                           |-- polySurface3
                           |__ polySurface4

ボタンに触れて、ボタンがタップされたかどうかを判断しようとしています。私にとって重要な唯一のノードはbigButton. オブジェクトをタップしてこのメ​​ソッドを使用すると:

- (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){
        // retrieved the first clicked object
        SCNHitTestResult *result = [hitResults objectAtIndex:0];

result.node触れたノードがあったpolySurface1かどうかを教えてくれますpolySurface2bigButtonそれは単なるノードであり、サーフェスではないため、タップされたことは決してわかりません。

OK、親のノードを検出するために使用できますが、上または下の異なる階層レベルにある可能性があるparentNodeため、これはばかげています。これはそれを行う唯一のラメモードですか?階層を横断して正しいノードを検索するには、または美しい方法はありますか?result.nodebigButton

ありがとう。

4

1 に答える 1

2

私にとって重要な唯一のノードはbigButton.

他のノードがヒットしたことを知りたくないという意味であれば、SCNHitTestRootNodeKeyヒット テスト オプションを検討する必要があります。

bigButtonルート ノードとして指定することは、ヒット テストの結果を取得することは、チェックを行う必要なく、ヒットしたことを意味することを意味しますbigButton

于 2016-03-05T22:00:11.623 に答える