#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 с родительского на дочерний из-за одной и той же ссылки