2015-02-22 3 views
1

Есть ли способ показать несколько сцен в одном SCNView одновременно? Итак, скажем, у меня есть мяч в ball.dae и пирамида в pyramid.dae. Таким образом, это отдельные сцены, и я хотел бы показать их одновременно.SceneKit - отображать несколько сцен в одном SCNView

В настоящее время у меня есть только один, и я создаю его так:

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

Если я просто создать еще один ниже, то он просто отображает второй ...:/

Заранее спасибо!

ответ

1

Хорошо, я уже понял это. Дело в том, чтобы не добавить еще одну сцену, но узлы из 2-й сцены к первой, как это:

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

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

scene.rootNode.addChildNode(pyramid) 
0

В последней версии Xcode 6.2 с прошивкой 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 to subScene?

+0

Это кажется довольно неудобным, но спасибо, хотя – LinusGeffarth

1

Я сделал два расширения 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"]) 
// 

Конечно, это работает не только на корневом узле, но на всех SCNNodes. Я использую клонирование здесь, чтобы оригинал оставался неповрежденным для многократного использования.

Надеюсь, это полезно. Так рад, что это Свифт .. С уважением. Ted

+0

Ну, спасибо, но у меня была проблема, выясненная некоторое время назад;) – LinusGeffarth

Смежные вопросы