In the apple example code for ARKit, they provided a VirtualObject
class that load Scn files from Models.scnassets
.
static let availableObjects: [VirtualObject] = {
let modelsURL = Bundle.main.url(forResource: "Models.scnassets", withExtension: nil)!
let fileEnumerator = FileManager().enumerator(at: modelsURL, includingPropertiesForKeys: [])!
return fileEnumerator.compactMap { element in
let url = element as! URL
guard url.pathExtension == "scn" && !url.path.contains("lighting") else { return nil }
return VirtualObject(url: url)
}
}()
Let's say I have a SCNScene that download from a sever, the first question is, this SCNScene is similar to scn files?
if yes, how can I add this SCNScene to the above function, and get its URL to add it in the return VirtualObject(url: url)
? I stuck in this part for days, would be appreciated if anyone can help me.
CodePudding user response:
You can store it in the file manager and get url from there
if scene is your SCNScene
:
static let availableObjects: [VirtualObject] = {
var virtualObjects: [VirtualObject] = []
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let url = paths.appendingPathComponent("chair.scn")
scene.write(to: url, options: nil, delegate: nil) { float, error, pointer in
if let error = error {
print(error.localizedDescription)
return
}
}
if let objects = VirtualObject(url: url) {
virtualObjects.append(objects)
}
return virtualObjects
}