在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的扩展名吗?

最佳答案

它不等于sceneView.scene.rootNode吗?

关于swift - 获取节点的rootNode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52370664/

10-12 14:39