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

Sam*_*ing 1 scenekit swift

基本上这个问题是针对 SceneKit 的。

我有一个父节点,里面有一些较小的节点,稍后父节点变得透明(父节点的漫反射材质不透明度设置为 0),之后我想获取在对象内部点击的节点,如何我应该这样做吗?默认命中测试返回父节点,并且由于对象内部有一些较小的节点,因此我需要被点击的精确节点。

Eug*_*ene 5

要解决此问题,我建议阅读 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 == .ended else { return }

        for result in results.filter( { $0.node.name == "Your node name" }) {
            // do manipulations
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!此致。