gpt4 book ai didi

swift - 如何从 SCNNode 父节点中删除或删除子节点?

转载 作者:行者123 更新时间:2023-11-28 13:51:55 24 4
gpt4 key购买 nike

我使用 Apple 的 ARKit Scanner 来扫描一个项目,这样我就可以在它周围放置物体以获取设置某些东西的说明。我使用渲染器函数将其作为我的节点来锚定其周围的对象。我想为用户创建说明,因此当用户单击“下一步”按钮时,会弹出一个使用 .scn 文件的新节点。我将 ARKit Scanned 对象称为 baseNode,将 .scn 对象添加到“objectNodes”。

问题是当用户按下上一个或下一个按钮时,我将另一个 child 添加到我不想要的 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 上再次拥有零个子节点。

最佳答案

如果你想移除所有的 child 。

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

否则,先过滤得到childNode。

关于swift - 如何从 SCNNode 父节点中删除或删除子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54488711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com