在 ARKit 中交换 3D 模型的节点

Exchange nodes of 3D Model in ARKit

我有一个汽车模型。这个模型包含很多组(门、轮胎、windows、车身)。我想通过按下按钮来改变轮胎的型号。但是我找不到正确的节点。 我目前的想法是搜索汽车的所有子节点,当我找到轮胎时,更换它们。

我的代码:

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    guard anchor is ARImageAnchor else { return }

    guard let carNode = sceneView.scene.rootNode.childNode(withName: "Car", recursively: false) else { return }
    node.addChildNode(carNode)

@IBAction func tireChangePressed(_ sender: UIButton) {
var exchangeTires = sceneView.scene.rootNode.childNode(withName: "Tires 2")
    self.sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
        if node.name == "Tires"{
// here I try to exchange the node namend "Tires" with the optional node named "Tires 2"
            node = exchangeTires
        }
    }
}

但是一直报node是let常量的错误。我应该使用其他方法遍历所有子节点还是可能是什么问题?

SCNNode 和节点树的工作方式类似于 UIView 和视图树,因此与其尝试将现有节点设置为其他节点,不如:

  1. parent
  2. 获取目标的父节点
  3. removeFromParentNode()删除目标节点
  4. 将新的子节点添加到父节点addChildNode(_:)