在SceneKit中检测对象的子节点上的触摸

时间:2018-08-02 14:31:56

标签: swift scenekit

基本上是this question,但适用于SceneKit。

我有一个父节点,其中有几个较小的节点,此后的父节点变为透明的,(父节点的漫反射材料不透明度设置为0)之后,我想获得在对象,我该怎么做呢?默认的命中测试将返回父节点,并且由于对象内部有一些较小的安静节点,因此我需要精确点击一个节点。

1 个答案:

答案 0 :(得分:1)

要解决此问题,我建议阅读Apple的下一个主题:

https://developer.apple.com/documentation/scenekit/scnhittestoption

总体思路:

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

@objc func search(sender: UITapGestureRecognizer) {

    let sceneView = sender.view as! ARSCNView
    let location = sender.location(in: sceneView)
    let results = sceneView.hitTest(location, options: [SCNHitTestOption.searchMode : 1])

    guard sender.state == .began else { return }

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

希望有帮助! 最好的问候。