SceneKit - 在同一个SCNView中显示多个场景

时间:2015-02-22 07:02:29

标签: ios swift scenekit scene

有没有办法可以同时在同一个SCNView中显示多个场景?所以,让我们说ball.dae中有一个球,pyramid.dae中有一个金字塔。所以这些是不同的场景,我想同时展示两者。

目前我只有一个,我这样创建:

let scene = SCNScene(named: "world1.dae")!

如果我只是在下面创建另一个,那么它只显示第二个......:/

提前致谢!

3 个答案:

答案 0 :(得分:3)

好的,我已经弄清楚了。问题是不添加另一个场景,而是从第二个场景到第一个场景的节点如下:

let scene = SCNScene(named: "world1.dae")!
let subScene = SCNScene(named: "pyramid.dae")!

let pyramid = subScene.rootNode.childNodeWithName("pyramid", recursively: true)!

scene.rootNode.addChildNode(pyramid)

答案 1 :(得分:2)

我已经制作了两个克隆节点的SCNNode扩展函数 来自另一个场景:

extension SCNNode
{

    func addNodeClonesWithNames(#fromScene: SCNScene,   nodeNames: [String]  )
    {
        for nodename in nodeNames
        {
            self.addClonedChildNode( fromScene.rootNode.childNodeWithName(nodename, recursively: true)! )
        }
    }

    func addClonedChildNode(node: SCNNode)
    {
        self.addChildNode(node.clone() as! SCNNode)
    }
 }

在视图控制器中,在此处加载两个场景:

let scnMain   = SCNScene(named: "world1.dae")!
let scnAssets = SCNScene(named: "props.dae")!


// then add some nodes from the assets scene to the main scene's
// root node by name:

scnMain.rootNode.addNodeClonesWithNames(fromScene: scnAssets, 
           nodeNames: ["btnStartEngine","btnStop","btnReverse","btnEject"])
//

当然,这不仅适用于根节点,也适用于所有SCNNode。 我在这里使用克隆,以便原始文件保持完整,可以多次使用。

我希望这很有用。很高兴这是Swift ..问候。泰德

答案 2 :(得分:0)

在最新版本的Xcode 6.2和iOS 8.2中,我不得不稍微更改代码

  func getNodeFromScene(colladaFile: String)  -> SCNNode {
    var subScene = SCNScene(named: "art.scnassets/\(colladaFile).dae")
    let geometryNode = subScene?.rootNode.childNodeWithName(colladaFile, recursively: true)!
    return geometryNode!
  }

subScene到subScene?