我使用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上再次拥有零个子节点。
答案 0 :(得分:1)
如果要删除所有子项。
Node.children.map{$0.removeFromParentNode()}
否则,请过滤以首先获取childNode。