Обмен узлами 3D-модели в ARKit - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть модель автомобиля.Эта модель содержит много групп (двери, шины, окна, кузов).Я хотел бы изменить модель шин нажатием кнопки.Но у меня проблемы с поиском правильного узла.Моя текущая идея состояла в том, чтобы обыскать все дочерние узлы автомобиля и, когда я найду шины, заменить их.

Мой код:

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
        }
    }
}

Но он продолжает выдавать ошибку этого узлаявляется константой let.Должен ли я использовать другой метод для перебора всех дочерних узлов или в чем может быть проблема?

1 Ответ

0 голосов
/ 28 ноября 2018

SCNNode и дерево узлов работают аналогично UIView и дереву представлений, поэтому вместо попытки установить существующий узел равным чему-то другому, вы должны:

  1. Получить родительский узел цели с помощью parent
  2. Удалите целевой узел с помощью removeFromParentNode ()
  3. Добавьте новый дочерний узел к родителю с помощью addChildNode (_ :)
...