这是有效的
let scene = SCNScene(named: "house.dae")
有没有节点的等价物?
let node = SCNNode(geometry: SCNGeometry( ..??.. "house.dae" ..??.. ))
我已经四处搜寻,但没有找到能够将整个dae文件加载到一个SCNNode中的方法。(而不仅仅是其中的一个ID)
这是有效的
let scene = SCNScene(named: "house.dae")
有没有节点的等价物?
let node = SCNNode(geometry: SCNGeometry( ..??.. "house.dae" ..??.. ))
我已经四处搜寻,但没有找到能够将整个dae文件加载到一个SCNNode中的方法。(而不仅仅是其中的一个ID)
// 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()
iOS 9引入了SCNReferenceNode
类。现在你可以这样做:
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!)
}
}
这是我在实际项目中使用的:
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)
}
}
}
之后,您可以调用以下内容:
let node = SCNNode(named: "art.scnassets/house.dae")
SCNScene(named:)
方法返回的场景具有一个rootNode
属性,其子节点是您加载的DAE文件的内容。您应该能够从该节点中获取子节点并将它们添加到现有SCNScene中的其他节点中。
rootNode
移动到另一个场景中。您需要取出一个子节点来代替。 - rickster