如何从SCNNode父级删除子节点或将其设为零?

时间:2019-02-02 00:09:58

标签: swift arkit

我使用Apple的ARKit扫描仪扫描物品,以便可以在物品周围放置对象以获取设置物品的说明。我使用了renderer函数,将其作为锚点围绕它的对象。我想为用户创建说明,以便当用户单击“下一步”按钮时,会弹出一个使用.scn文件的新节点。我将ARKit Scanned对象称为baseNode,并将.scn对象添加到“ objectNodes”中。

问题是当用户按下上一个或下一个按钮时,我正在向不需要的objectNodes添加另一个子对象。我希望能够从objectNodes中删除一个子节点。我的问题是,如何从SCNNode删除子节点。

我尝试使用let temp = objectNodes.childNods,temp.removeAll(),但是不允许我将objectNodes重新分配给temp,因为temp通过使用.childNodes成为数组。我希望能够使用相同的节点,但只需覆盖它即可。

@objc func nextStep() {
        switch numberOfStep {
        case 0:
            nextStep.text = "Next Step"
            previousStep.text = ""
            addBattery()
            numberOfStep += 1
        case 1:
            nodeObjects.removeFromParentNode()
            addLANObject()
}

func addBattery () {
        let battery = insertBattery(objectName: "art.scnassets/object/screwdriver.scn")
        let battery2 = insertSecondBattery(objectName: "art.scnassets/object/screwdriver.scn")
        nodeBatteryAnimation(scene: battery)
        nodeBatteryAnimation(scene: battery2)
        objectsNodes.addChildNode(battery2)
        objectsNodes.addChildNode(battery)
        baseNode.addChildNode(nodeObjects)
}

func addLANObject () {
        let etherCord = ethernet1(objectName: "art.scnassets/object/box.scn")
        nodeAnimation(scene: etherCord)
        objectsNodes.addChildNode(etherCord)
        baseNode.addChildNode(nodeObjects)
}

我添加了一些打印语句,并且看到要向objectNodes添加更多的子节点。当我使用objectNodes.removeFromParent()时,它将从baseNode中删除它,但是当我进行下一步时,我将一个子节点添加到objectNodes并将其重新添加到baseNode。我只想在objectNodes上再次拥有零个子节点。

1 个答案:

答案 0 :(得分:1)

如果要删除所有子项。

Node.children.map{$0.removeFromParentNode()}

否则,请过滤以首先获取childNode。