是否可以更改ARKit场景's对象



我是第一次构建和ARkit项目,我需要做的是,首先,我必须在ARSCNView中显示一个3D球体。然后当我点击一个按钮时,球体应该会消失,并在它的位置显示一个3D立方体。

我在想我的代码:

@IBOutlet weak var sceneView: ARSCNView!
var  objectNode: SCNNode?
var objectScene: SCNScene?
objectScene = SCNScene(named: "sphere.dae")
objectNode = objectScene!.rootNode
sceneView.scene.rootNode.addChildNode(objectNode!)

这是按钮的代码:

@IBAction func cubeButtonClicked(_ sender: UIButton) {
sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode()
}

objectScene = SCNScene(named: "cube.dae")    
objecteNode = objectScene!.rootNode
sceneView.scene.rootNode.addChildNode(objecteNode!) 
}

我正面临这个错误

[SceneKit] Error: removing the root node of a scene from its scene is not allowed

我做错什么了吗?

实际上错误告诉是什么导致了它

已编辑--尝试以下两种方法之一

  • 使用以下代码可避免删除pointOfView,即SCNCamera
sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
if node == sceneView.pointOfView {return}
node.removeFromParentNode()
}
  • 如果您只有一个要删除的节点,在您的情况下是sphereNode,则不需要使用enumerate方法。只需保留对该节点的引用,并在需要时删除
sphereNode.removeFromParentNode()

我在上面的代码中缺少的是,我必须进行删除并添加两个同步任务。由于Delete函数是一个闭包(异步任务(。因此添加功能将在删除之前执行。到那时,错误就会消失。

相关内容

  • 没有找到相关文章

最新更新