尝试用不同 .scn 文件中的节点替换 ChildNode,为什么它不起作用?

Trying to replaceChildNode with node in different .scn file, why isn't it working?

我正在尝试用另一个 .scn 文件中的另一个节点替换主 .scn 中的一个节点。 我找到了

的方法
 func replaceChildNode(_ oldChild: SCNNode, 
                 with newChild: SCNNode)

但是当我实现它的时候。在我的代码中,我收到 1 个警告和 2 个错误:

warning= Expression implicitly coerced from 'SCNNode?' to 'Any'

error= 1.expected seperator (after with), 2.use of unresolved identifier 'with'.

即使在错误一修复 1 之后仍然出现错误 2 和警告

我按以下方式定义了我的节点:

 var scene:SCNScene!
 var test3Scene:SCNScene!

在加载程序中变为:

 scene = SCNScene(named: "art.scnassets/x1.scn")
 test3Scene=SCNScene(named: "art.scnassets/test3.scn")

相关函数如下所示:

   @objc func buttonClicked(){
      print("clicked")
      sceneView.allowsCameraControl  = false
      if(selection=="avatar"){
        scene.rootNode.replaceChildNode(_, oldChild: scene.rootNode.childNode(withName: "test1 reference", recursively: true),
                                        with  newChild: test3Scene.rootNode.childNodes[0])
}


//scene.rootNode.childNode(withName: "test1 reference", recursively: true) being the oldChild
//test3Scene.rootNode.childNodes[0] being the new one

任何人都可以帮助完成这项工作吗?感谢您的宝贵时间

childNode(withName:recursively:) 方法 returns 一个可选的 (SCNNode?) 但 replaceChildNode(_:with:) 需要一个 SCNNode.

在调用中使用之前,您需要解包可选。


此外,在调用站点同时使用参数标签和参数名称也存在问题。这是无效的。参见 Function Argument Labels and Parameter Names

scene.rootNode.replaceChildNode(_, oldChild: A
                                with newChild: B)

应该是

scene.rootNode.replaceChildNode(A,
                                with: B)