SceneKit - 将DAE加载到SCNNode中(解包错误)

时间:2015-04-05 16:25:01

标签: ios swift scenekit

我目前正在尝试将dae文件导入SCNNode,然后将其添加到场景中。我在这里发现了一些很棒的东西,但我已经撞墙了。

我在这里找到了我试图实施的答案 - Stackoverflow: load a collada (dae) file into SCNNode (Swift - SceneKit)

我已尝试实施顶级解决方案,但收到错误消息:

  

"可选类型' SCNNode的值?'没有打开;你的意思是使用'!'或者'?'

可能是我忽略了一些非常基本的东西,我非常喜欢。

我将在下面包含我的ViewController viewDidload代码,如果有人能对此有所了解,我会非常感激!

let scnView = self.view as SCNView
let scene = MasterScene()
scnView.scene = scene
scnView.backgroundColor = UIColor.grayColor()

// enable default lighting
scnView.autoenablesDefaultLighting = true
// enable default camera
scnView.allowsCameraControl = true

var node = SCNNode()
let assetScene = SCNScene(named: "s185.dae")
scene.rootNode.addChildNode(assetScene?.rootNode.childNodeWithName("s185", recursively: true))
// Last line produces error

1 个答案:

答案 0 :(得分:0)

您的assetScene是可选的。您似乎已经有了这一部分,因为您使用可选链接来访问其rootNode

但是,使用可选链接的表达式产生的任何结果本身都是可选的 - 您不知道assetScene存在,所以您不知道是否存在任何您试图从中获取的内容,无论是。

addChildNode采用非可选SCNNode - 您无法向其传递可选项。您需要首先解开该可选项。即使您使用assetScene打开if let,您仍然会获得可选项,因为您不知道childNodeWithName是否找到了某个节点。

尝试这样的事情:

 if let assetScene = SCNScene(named: "s185.dae") {
      if let node = assetScene.rootNode.childNodeWithName("s185", recursively: true) {
           scene.rootNode.addChildNode(node)
      }
 }