SceneKit – 在同一个 SCNView 中显示多个场景
SceneKit – Display multiple scenes in same SCNView
有没有办法可以在同一个SCNView中同时显示多个场景?假设我在 ball.dae
中有一个球,在 pyramid.dae
中有一个金字塔。所以这些是不同的场景,我想同时展示它们。
目前我只有一个,我是这样创建的:
let scene = SCNScene(named: "world1.dae")!
如果我只是在下面创建另一个,那么它只会显示第二个...:/
提前致谢!
好的,我已经知道了。问题是不要添加另一个场景,而是像这样从第二个场景添加节点到第一个场景:
let scene = SCNScene(named: "world1.dae")!
let subScene = SCNScene(named: "pyramid.dae")!
let pyramid = subScene.rootNode.childNodeWithName("pyramid", recursively: true)!
scene.rootNode.addChildNode(pyramid)
在最新的 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!
}
子场景到子场景?
我做了两个克隆节点的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.. 问候。泰德
有没有办法可以在同一个SCNView中同时显示多个场景?假设我在 ball.dae
中有一个球,在 pyramid.dae
中有一个金字塔。所以这些是不同的场景,我想同时展示它们。
目前我只有一个,我是这样创建的:
let scene = SCNScene(named: "world1.dae")!
如果我只是在下面创建另一个,那么它只会显示第二个...:/
提前致谢!
好的,我已经知道了。问题是不要添加另一个场景,而是像这样从第二个场景添加节点到第一个场景:
let scene = SCNScene(named: "world1.dae")!
let subScene = SCNScene(named: "pyramid.dae")!
let pyramid = subScene.rootNode.childNodeWithName("pyramid", recursively: true)!
scene.rootNode.addChildNode(pyramid)
在最新的 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!
}
子场景到子场景?
我做了两个克隆节点的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.. 问候。泰德