基本上是this question,但适用于SceneKit。
我有一个父节点,其中有几个较小的节点,此后的父节点变为透明的,(父节点的漫反射材料不透明度设置为0)之后,我想获得在对象,我该怎么做呢?默认的命中测试将返回父节点,并且由于对象内部有一些较小的安静节点,因此我需要精确点击一个节点。
答案 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
}
}
}
希望有帮助! 最好的问候。