无论如何都可以识别ARKit中触摸的节点



我正在使用ARKit来投影3D文件。在该 3D 中有多个子节点。当用户触摸任何节点时,我们必须显示有关触摸节点的一些信息。

有什么方法可以识别用户触摸了哪个节点?

您可以执行命中测试以确定用户触摸了哪个节点。假设场景中有两个节点,例如:

override func viewDidLoad() {
    ...
    let scene = SCNScene()
    let node1 = SCNNode()
    node1.name = "node1"
    let node2 = SCNNode()
    node2.name = "node2"
    scene.rootNode.addChildNode(node1)
    scene.rootNode.addChildNode(node2)
    sceneView.scene = scene
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapped))
    sceneView.addGestureRecognizer(tapGestureRecognizer)
}

在 tap 处理程序中,您可以检测触摸的节点并执行所需的任何逻辑,例如显示有关节点的一些信息。

@objc func tapped(recognizer: UIGestureRecognizer) {
    guard let sceneView = recognizer.view as? SCNView else { return }
    let touchLocation = recognizer.location(in: sceneView)
    let results = sceneView.hitTest(touchLocation, options: [:])
    if results.count == 1 {
        let node = results[0].node
        print(node.name) // prints "node1" or "node2" if user touched either of them
        if node.name == "node1" {
            // display node1 information
        } else if node.name == "node2" {
            // display node2 information
        }
    }
}

最新更新