This works
let scene = SCNScene(named: "house.dae")
Is there an equivalent for a node?
let node = SCNNode(geometry: SCNGeometry( ..??.. "house.dae" ..??.. ))
I have searched high and low, finding nothing that will load an entire dae file into a SCNNode. (not just one ID from it)
// add a SCNScene as childNode to another SCNScene (in this case to scene)
func addSceneToScene() {
let geoScene = SCNScene(named: "art.scnassets/ball.dae")
scene.rootNode.addChildNode(geoScene.rootNode.childNodeWithName("Ball", recursively: true))
}
addSceneToScene()
That's what I use in real project:
extension SCNNode {
convenience init(named name: String) {
self.init()
guard let scene = SCNScene(named: name) else {
return
}
for childNode in scene.rootNode.childNodes {
addChildNode(childNode)
}
}
}
After that you can call:
let node = SCNNode(named: "art.scnassets/house.dae")
iOS 9 introduced the SCNReferenceNode
class. Now you can do:
if let filePath = Bundle.main.path(forResource: "Test", ofType: "dae", inDirectory: "GameScene.scnassets") {
// ReferenceNode path -> ReferenceNode URL
let referenceURL = URL(fileURLWithPath: filePath)
if #available(iOS 9.0, *) {
// Create reference node
let referenceNode = SCNReferenceNode(URL: referenceURL)
referenceNode?.load()
scene.rootNode.addChildNode(referenceNode!)
}
}
The scene you get from SCNScene(named:)
has a rootNode
property whose children are the contents of the DAE file you loaded. You should be able to pull children off that node and add them to other nodes in an existing SCNScene.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With