В SCNScene.write()
подпись позволяет указать делегата, который используется для определения способа сохранения, главным образом, текстурных активов:
func write(to url: URL, options: [String : Any]? = nil, delegate: SCNSceneExportDelegate?, progressHandler: SCNSceneExportProgressHandler? = nil) -> Bool
Документация здесь
Однако, когда я пытаюсь использовать его, делегат никогда не вызывается, даже в ситуациях, в которых, я думаю, он должен:
...
guard let shipText = Bundle.main.url(forResource: "texture", withExtension: "png", subdirectory: "art.scnassets") else {
print("Couldn't retrieve texture")
return
}
do {
let scene = SCNScene()
let boxGeom = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
boxGeom.firstMaterial!.diffuse.contents = shipText.path
boxGeom.firstMaterial!.lightingModel = .constant
let boxNode = SCNNode(geometry: boxGeom)
scene.rootNode.addChildNode(boxNode)
let fileMan = FileManager.default
let docsDir = try fileMan.url(for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil, create: true)
let uuid = UUID.init().uuidString
let exportBaseName = docsDir.appendingPathComponent(uuid, isDirectory: false)
print("exportBaseName: \(exportBaseName)")
let daeExport = exportBaseName.appendingPathExtension("dae")
let scnExport = exportBaseName.appendingPathExtension("scn")
// This prints true
print(scene.write(to: scnExport, options: nil, delegate: self, progressHandler: nil))
// This prints true
print(scene.write(to: daeExport, options: nil, delegate: self, progressHandler: nil))
}
catch {
print(error.localizedDescription)
}
...
...
// This never gets called
extension ViewController: SCNSceneExportDelegate {
func write(_ image: UIImage, withSceneDocumentURL documentURL: URL, originalImageURL: URL?) -> URL? {
print("Delegate being called: ", image, documentURL, originalImageURL)
return nil
}
}
Это проблема для меня, потому что я пытаюсь экспортироватьПравильные сцены и возможность переписать расположение текстур, которые используются в материалах, - это особенность, которая мне нужна.
Может кто-нибудь сказать мне, если я делаю что-то не так, если что-нибудь?