Swift 3 将 .dae 文件加载到 SCNNode

Swift 3 load .dae file into SCNNode

正在加载 .dae 文件作为场景元素

此代码有效,加载文件作为场景:

let scene = SCNScene(named: "art.scnassets/base-wall-tile_sample.dae")!

此代码将文件加载为 SCNGeometry,不会:

let url = Bundle.main.url(forResource: "art.scnassets/base-wall-tile_sample", withExtension: "dae")
let source = SCNSceneSource(url: url! )
let geo = source!.entryWithIdentifier("Geo", withClass: SCNGeometry.self)!

url 和 source 没问题,但它在尝试生成 geo 时崩溃了。糟糕的指导。

这段代码,就像网上提供的几个例子一样,在 Swift 2(load a collada (dae) file into SCNNode (Swift - SceneKit)。我不得不把它改成 Swift 3,而且似乎有些东西迷失在翻译中。有人能告诉我如何正确地做这些事情吗?

.dae 文件始终作为 SCNScene 加载。您需要命名包含要添加的几何图形的节点。 然后您可以加载场景,为具有给定名称的节点过滤它并将其添加到您的场景中。

func addNode(named nodeName, fromSceneNamed: sceneName, to scene: SCNScene) {
    if let loadedScene = SCNScene(named: sceneName),
       let node = loadedScene.rootNode.childNode(withName: nodeName, recursivly: true) {
        scene.rootNode.addChildNode(node)
    }
}
guard let shipScene = SCNScene(named: "ship.dae") else { return }
let shipNode = SCNNode()
let shipSceneChildNodes = shipScene.rootNode.childNodes
for childNode in shipSceneChildNodes {
    shipNode.addChildNode(childNode)
}
node.addChildNode(shipNode)