Как клонировать scnnode с другим экземпляром?

#swift #scenekit #arkit #scnnode #scnscene

#swift #scenekit #arkit #scnnode #scnscene

Вопрос:

В настоящее время я работаю над проектом на основе AR, который обладает функциональностью дублирования объекта AR, проблема, с которой я сталкиваюсь, заключается в том, что я использую метод .clone() для клонирования SCNNode… он создает одинаковые экземпляры, и когда я меняю имя дублированного SCNNode, он меняет имя всех узлов.. Как я могу клонировать SCNNode с другими свойствами name, ModelName и т. Д.?

По сути, я хочу, чтобы конкретное свойство каждого клонированного виртуального объекта удаляло объект..

Код для размещения объекта

     func placeVirtualObject(_ virtualObject: VirtualObject) {
    guard let cameraTransform = session.currentFrame?.camera.transform,
        let focusSquarePosition = focusSquare.lastPosition else {
        statusViewController.showMessage("CANNOT PLACE OBJECTnTry moving left or right.")
        return
    }
    Api.Params.selectedModel = virtualObject
    virtualObject.name = String(Api.Params.inputPreviewId)
    virtualObject.scale = SCNVector3Make(0.01, 0.01, 0.01)

    virtualObject.setPosition(focusSquarePosition, relativeTo: cameraTransform, smoothMovement: false)
    updateQueue.async {
        self.sceneView.scene.rootNode.addChildNode(virtualObject)
    }
}
  

для дублирования узла

         func placeDuplicateVirtualObject(_ virtualObject: VirtualObject) {
        guard let cameraTransform = session.currentFrame?.camera.transform,
            let focusSquarePosition = focusSquare.lastPosition else {
            statusViewController.showMessage("CANNOT PLACE OBJECTnTry moving left or right.")
            return
        }
        Api.Params.selectedModel = virtualObject
        let duplicate = virtualObject.clone()
        
        duplicate.name = String(Api.Params.inputPreviewId)
        
        duplicate.scale = SCNVector3Make(0.01, 0.01, 0.01)

        duplicate.setPosition(focusSquarePosition, relativeTo: cameraTransform, smoothMovement: false)
        updateQueue.async {
            self.sceneView.scene.rootNode.addChildNode(duplicate)
        }
    }
  

Комментарии:

1. Почему вы хотите это сделать? Какую проблему вы действительно пытаетесь решить? Это проблема с производительностью? Что-то еще?

2. @HalMueller , я хочу удалить VirtualObject по его имени (или любому уникальному свойству), теперь проблема в том, что всякий раз, когда я дублирую VirtualObject , он клонируется с той же ссылкой, и когда я меняю его имя, оно изменяется во всех VirtualObject с родительского на дочерний из-за одной и той же ссылки