如何在ARKit SceneView中删除特定节点

时间:2018-12-22 14:08:20

标签: ios arkit

我的场景视图中有很多节点,包括标准的“焦点正方形”(该节点可帮助用户放置对象,并在用户移动电话时位于表面上)。除了那一个,我想删除所有这些。

s1

这是我删除除焦点正方形以外的所有节点的方法:

class FocusSquare: SCNNode {
    // MARK: - Types

    enum State: Equatable {
        case initializing
        case detecting(hitTestResult: ARHitTestResult, camera: ARCamera?)
    }

    ...
    // Find code here: https://github.com/BlackMirrorz/ARKitWorldMaps/tree/c7ea837006e26ec7d8542ad2d3c417d5fd3910d5/CloudCube/CloudCube/Apple%20Focus%20Square
}

但是,即使我正在检查节点类,这也确实会删除焦点正方形。为什么我不能删除特定节点?

我认为问题在于删除此处的节点无法像视图一样工作。对于如何在场景视图中添加节点,没有“层次结构”。我不确定。这是将焦点正方形添加到视图的方式:

sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
    if let node = node as? FocusSquare {
        print("should not remove node") // fired once, however it still gets deleted
    } else {
        node.removeFromParentNode()
    }
}

2 个答案:

答案 0 :(得分:1)

我实际上不是在尝试找到焦点正方形,而是在尝试找到其他自定义节点类:

sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
    if node is TranslationNode {
        node.removeFromParentNode()
    }
}

这很好。

答案 1 :(得分:0)

我不是SceneKit的专家,但是如果FocusSquare是另一个节点的子节点,那么在枚举过程中也可以删除此(FocusSquare父级),从而也可以删除FocusSquare。

将FocusSquare添加到rootNode可以解决该问题吗?

希望这个答案有所帮助。