我想知道是否有人知道可以加载AR对象(例如,从web加载.usdz并将其放在AR视图中)。我试着这样做:
let fileUrl = NSURL(string: "https://developer.apple.com/augmented-reality/quick-look/models/drummertoy/toy_drummer.usdz")
cancellable = Entity.loadModelAsync(contentsOf: fileUrl! as URL)
.sink(receiveCompletion: { completion in
self.cancellable?.cancel()
}, receiveValue: { [self] (model: Entity) in
if let model = model as? ModelEntity {
let anchorEntity = AnchorEntity(anchor: anchor)
anchorEntity.addChild(model)
arView.scene.addAnchor(anchorEntity)
loadingView.isHidden = true
}
})但是它不能正常工作并抛出错误Failed to open scene 'https://developer.apple.com/augmented-reality/quick-look/models/drummertoy/toy_drummer.usdz'.
如果可能的话,你会这样做吗?
发布于 2021-01-29 03:15:47
试试这个:
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
arView.environment.background = .color(.black)
let url = URL(string: "https://developer.apple.com/augmented-reality/quick-look/models/drummertoy/toy_drummer.usdz")
let documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let destination = documents.appendingPathComponent(url!.lastPathComponent)
let session = URLSession(configuration: .default,
delegate: nil,
delegateQueue: nil)
var request = URLRequest(url: url!)
request.httpMethod = "GET"
let downloadTask = session.downloadTask(with: request, completionHandler: { (location: URL?,
response: URLResponse?,
error: Error?) -> Void in
let fileManager = FileManager.default
if fileManager.fileExists(atPath: destination.path) {
try! fileManager.removeItem(atPath: destination.path)
}
try! fileManager.moveItem(atPath: location!.path,
toPath: destination.path)
DispatchQueue.main.async {
do {
let model = try Entity.load(contentsOf: destination)
let anchor = AnchorEntity(world: [0,-0.2,0])
anchor.addChild(model)
anchor.scale = [5,5,5]
self.arView.scene.addAnchor(anchor)
model.playAnimation(model.availableAnimations.first!.repeat())
} catch {
print("Fail loading entity.")
}
}
})
downloadTask.resume()
}
}https://stackoverflow.com/questions/65936194
复制相似问题