swift - 如何从 SCNNode 父节点中删除或取消子节点?
问题描述
我使用 Apple 的 ARKit 扫描仪来扫描一个项目,这样我就可以在它周围放置物体以获得设置某些东西的说明。我使用渲染器函数将其作为我的节点来锚定对象。我想为用户创建说明,因此当用户单击“下一步”按钮时,会弹出一个使用 .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 上再次有零子节点。
解决方案
如果要删除所有孩子。
Node.children.map{$0.removeFromParentNode()}
否则,先过滤得到childNode。
推荐阅读
- java - Intelij - 并行运行
- python - 将步进电机移动到准确位置
- r - system.run 在 Windows 环境中的 R 中
- visual-studio - 快速故障模式有什么作用?
- loops - 我怎样才能循环这段代码?请帮我
- mongodb - Spring Data MongoDB 使用 filterArray 更新双嵌套数组
- php - 如何在 PHP 中接受“子目录”作为参数
- duplicates - 为什么 Dedupe.io 中的记录链接为匹配的记录提供不同的集群 ID?
- json - 未处理的异常:“字符串”类型不是“地图”类型的子类型
' - php - 无法访问 Codeigniter 4 中的对象属性但在 Codeigniter 3 中工作?