我有3D模型,想单击此模型上的特定节点以创建一些动作。我的模型是一组节点。每个节点都没有冷却节点,我想单击其中一个节点以免除某些操作,然后单击另一个节点以免除不同的操作。如何检测模型上单击了哪个节点?
答案 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 ")
}