如何解决RealityKit – 从 Web URL 资源加载 ModelEntity
我想知道是否有人知道是否可以加载 AR 对象(例如从 web url 加载 .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'.
如果可能,你会吗?
解决方法
试试这个:
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()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。