检测哪个节点点击了 3D 模型
detect which node clicked on 3D model
我有 3D 模型,想单击此模型上的特定节点来创建一些动作。我的模型是一组节点;每个节点都没有 chilled 节点,我想单击其中一个节点以执行某些操作并单击另一个节点以执行不同的操作;如何检测哪个节点点击了我的模型?
您可以使用 hitTest(_:options:) from SCNSceneRenderer 检测从 2D 点触摸的 3D 对象。
它将 return 一个 SCNHitTestResult 的数组,其中包含 node
属性.
您应该阅读一些有关 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( { [=10=].node.name != nil }) {
if result.node.name == "Your node name" {
// excuse some actions
}
}
}
希望对您有所帮助!
我有 3D 模型,想单击此模型上的特定节点来创建一些动作。我的模型是一组节点;每个节点都没有 chilled 节点,我想单击其中一个节点以执行某些操作并单击另一个节点以执行不同的操作;如何检测哪个节点点击了我的模型?
您可以使用 hitTest(_:options:) from SCNSceneRenderer 检测从 2D 点触摸的 3D 对象。
它将 return 一个 SCNHitTestResult 的数组,其中包含 node
属性.
您应该阅读一些有关 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( { [=10=].node.name != nil }) {
if result.node.name == "Your node name" {
// excuse some actions
}
}
}
希望对您有所帮助!