我从这里下载了一个DAE
Collada文件,然后在最新的Xcode beta
中打开并将其转换为SCN
文件。
我使用此方法加载场景对象(其中 modelName
= model
, fileExtension
= scn
(:
private func loadModel() {
guard let virtualObjectScene = SCNScene(named: "(modelName).(fileExtension)", inDirectory: "art.scnassets/(modelName)") else {
return
}
let wrapperNode = SCNNode()
for child in virtualObjectScene.rootNode.childNodes {
wrapperNode.addChildNode(child)
}
self.addChildNode(wrapperNode)
}
但是,什么都没有出现!恐龙仅在加载 dae
文件时出现UPS(通过更改fileExtension
= dae
(,但是恐龙闪烁确实很奇怪。
我不明白为什么这是不起作用的,因为如果苹果在Xcode
中提供了从dae
到scn
的转换,我觉得它应该很容易使用所得的scn
文件。
任何帮助将不胜感激!
代码
恐龙.swift
class Dinosaur: VirtualObject {
override init() {
super.init(modelName: "model", fileExtension: "scn", title: "Dinosaur")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
virtualObject.swift
class VirtualObject: SCNNode {
var modelName: String = ""
var fileExtension: String = ""
var title: String = ""
override init() {
super.init()
self.name = "Virtual object root node"
}
init(modelName: String, fileExtension: String, title: String) {
super.init()
self.name = "Virtual object root node"
self.modelName = modelName
self.fileExtension = fileExtension
self.title = title
loadModel()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func loadModel() {
guard let virtualObjectScene = SCNScene(named: "(modelName).(fileExtension)", inDirectory: "art.scnassets/(modelName)") else {
return
}
let wrapperNode = SCNNode()
for child in virtualObjectScene.rootNode.childNodes {
wrapperNode.addChildNode(child)
}
self.addChildNode(wrapperNode)
}
private func unloadModel() {
for child in self.childNodes {
child.removeFromParentNode()
}
}
}
viewController.swift
var newObject: VirtualObject = Dinosaur()
@IBAction func loadAd(_ sender: UIButton) {
newObject.removeFromParentNode()
newObject.position = SCNVector3(0, 0, -1)
sceneView.scene.rootNode.addChildNode(newObject)
}
我也有同样的问题。我的解决方案:将.dae-file拖入项目中,然后通过"重复"按钮将其转换。在我这样做之后,.scn文件出现并且可见。