Я новичок в ARKIT, и мне просто интересно, есть ли способ отслеживать процент загрузки файла .SCN в процентах. Я пытался использовать сеанс URL, но не смог заставить его работать.
Хотя мой код работает хорошо, если мой код полностью отключен, пожалуйста, покажите мне, как сделать его лучше!
private func dowloadModel(){
let url = URL(string: "URL for .SCN")!
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error{
print(error.localizedDescription)
return
}
if let data = data{
print(data)
let documentDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let documentDirectory = documentDirectories.first{
let fileURL = documentDirectory.appendingPathComponent("Food.scn")
let dataNS : NSData? = data as NSData
try! dataNS?.write(to: fileURL, options: .atomic)
let url1 = URL(string: "URL for .jpg overlay")
let data1 = try? Data(contentsOf: url1!) //make sure your image in this url does exist
self.imagesOne = UIImage(data: data1!)
print("Saved!")
}
}
}.resume()
}
Вот как я рендерил узел:
func addItem2(hitTestResult : ARHitTestResult){
let documentDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let documentDirectory = documentDirectories.first{
let fileURL = documentDirectory.appendingPathComponent("Food.scn")
do{
let scene = try SCNScene(url: fileURL, options: nil)
let node = scene.rootNode.childNode(withName: "Burger", recursively: true)!
let material = SCNMaterial()
material.diffuse.contents = imagesOne
material.diffuse.wrapT = SCNWrapMode.repeat
material.diffuse.wrapS = SCNWrapMode.repeat
material.isDoubleSided = true
let transform = hitTestResult.worldTransform
let thirdColumn = transform.columns.3
node.scale = SCNVector3(x: 0.008, y: 0.008, z: 0.008)
node.pivot = SCNMatrix4MakeTranslation(0, -0.5, 0)
node.position = SCNVector3(thirdColumn.x, thirdColumn.y, thirdColumn.z)
//rotation added
let action = SCNAction.rotateBy(x: 0, y: CGFloat(2 * Double.pi), z: 0, duration: 15)
let repAction = SCNAction.repeatForever(action)
node.runAction(repAction, forKey: "myrotate")
self.sceneView.scene.rootNode.addChildNode(node)
}
catch{
print(error)
}
}
}