Swift 3将.dae文件加载到SCNNode中

时间:2017-07-12 15:12:55

标签: swift3 scenekit collada

将.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)!

网址和来源都可以,但是它会崩溃尝试生成地理位置。糟糕的指示。

这个代码,就像网上提供的几个例子一样,是在Swift 2中的load a collada (dae) file into SCNNode (Swift - SceneKit)。我不得不把它变成Swift 3,而且翻译中似乎丢失了一些东西。有人可以告诉我怎么做做这个东西吧?

2 个答案:

答案 0 :(得分:1)

.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)
    }
}

答案 1 :(得分:0)

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)