检测哪个节点点击了3D模型

时间:2019-01-24 07:47:17

标签: ios swift arkit

我有3D模型,想单击此模型上的特定节点以创建一些动作。我的模型是一组节点。每个节点都没有冷却节点,我想单击其中一个节点以免除某些操作,然后单击另一个节点以免除不同的操作。如何检测模型上单击了哪个节点?

3 个答案:

答案 0 :(得分:1)

您应该阅读一些有关SceneKit命中测试方法的信息,并遵循hit-test method

func registerGestureRecognizer() {
    let tap = UITapGestureRecognizer(target: self, action: #selector(detectNode))
    self.sceneView.addGestureRecognizer(tap)
}

@objc func detectNode(_ sender: UITapGestureRecognizer) {
    let sceneView = sender.view as! ARSCNView
    let location = sender.location(in: sceneView)
    let results = sceneView.hitTest(location, options: [SCNHitTestOption.searchMode : 1])

    for result in results.filter( { $0.node.name != nil }) {
        if result.node.name == "Your node name" {
            // excuse some actions
        }
    }
}

希望有帮助!

答案 1 :(得分:0)

您可以使用hitTest(_:options:)中的SCNSceneRenderer来检测从2D点触摸的3D对象。

它将返回包含node属性的SCNHitTestResult数组。

答案 2 :(得分:0)

i solved it  
guard let currentTouchLocation = touches.first?.location(in: self.sceneView), let hitTestResultNode = self.sceneView.hitTest(currentTouchLocation, options: nil).first else {return}
   // print(hitTestResultNode.node.name)
    if hitTestResultNode.node.name == "Hair"{
        print("hair node is clicked ")
    }else if hitTestResultNode.node.name == "_"{
        print("eye is clicked ")
    }