获取节点

时间:2018-09-17 15:02:41

标签: swift scenekit arkit

在ARKit项目中,当用户点击屏幕时,我想获取用户想要与之交互的元素的rootNode

手势和命中测试

func screenTapped(_ sender: UITapGestureRecognizer) {
    let hitTestResult = sceneView.hitTest(touchLocation)
    if let result = hitTestResult.first {
        guard let rootNode = getRoot(for: result.node) else {return}
        ...
    }

获取根节点的递归函数

func getRoot(for node: SCNNode) -> SCNNode? {
    if let node = node.parent {
        return getRoot(for: node)
    }
    else {
        return node
    }
}

但是让我感到奇怪的是,Swift在默认情况下没有提供任何东西,而为子节点提供了递归方法。

  • 是否有替代/更好的方法?
  • 我应该将此函数写为SCNNode的扩展名吗?

1 个答案:

答案 0 :(得分:0)

它不等于sceneView.scene.rootNode吗?