【发布时间】:2019-01-10 09:01:20
【问题描述】:
基本上是this question,但对于 SceneKit。
我有一个父节点,里面有几个较小的节点,稍后的父节点变得透明,(父节点的漫反射材质不透明度设置为 0)之后我想获得在里面点击的节点对象,我应该怎么做呢?默认命中测试返回父节点,由于对象内部有几个较小的节点,所以我需要精确的被点击的节点。
【问题讨论】:
基本上是this question,但对于 SceneKit。
我有一个父节点,里面有几个较小的节点,稍后的父节点变得透明,(父节点的漫反射材质不透明度设置为 0)之后我想获得在里面点击的节点对象,我应该怎么做呢?默认命中测试返回父节点,由于对象内部有几个较小的节点,所以我需要精确的被点击的节点。
【问题讨论】:
要解决此问题,我建议阅读 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
}
}
希望对您有所帮助! 最好的问候。
【讨论】: