Hallo zusammen,
ich bin neu im Programmieren und habe ein Problem:
Ich habe ein Tutorial gemacht, bei dem man mit swift eine .usdz-Datei in eine Szene laden kann, sodass das 3d-Modell in der .usdz-Datei in der Anwendung positioniert, skaliert und gedreht werden kann. Ich habe als einfaches Beispiel eine Datei namens "SpiralTest.usdz" eingebettet. Das funktioniert auch hervorragend für .usdz-Dateien. (wenn ich an den zwei Stellen im Code .rcproject durch .usdz ersetzt, geht es)
Nun benötige ich das Ganze aber nicht für eine .usdz-Datei, sondern für eine rcproject-Datei, denn die finale Datei (nicht diese Testdatei), die ich einbetten möchte, beinhaltet mehrere Animationen, die über Mitteilungen angesteuert werden sollen (das geht ja angeblich mit usdz-Dateien nicht).
Kann mir einer von euch sagen, wie ich den code umschreiben muss, damit es auch mit einer rcproject-Datei funktioniert?
Ich habe den Code und die zwei Dateien (.usdz und .rcprojekt) mal angehängt
Vielen lieben Dank für eure Hilfe.
ovidus
Alles anzeigen
ich bin neu im Programmieren und habe ein Problem:
Ich habe ein Tutorial gemacht, bei dem man mit swift eine .usdz-Datei in eine Szene laden kann, sodass das 3d-Modell in der .usdz-Datei in der Anwendung positioniert, skaliert und gedreht werden kann. Ich habe als einfaches Beispiel eine Datei namens "SpiralTest.usdz" eingebettet. Das funktioniert auch hervorragend für .usdz-Dateien. (wenn ich an den zwei Stellen im Code .rcproject durch .usdz ersetzt, geht es)
Nun benötige ich das Ganze aber nicht für eine .usdz-Datei, sondern für eine rcproject-Datei, denn die finale Datei (nicht diese Testdatei), die ich einbetten möchte, beinhaltet mehrere Animationen, die über Mitteilungen angesteuert werden sollen (das geht ja angeblich mit usdz-Dateien nicht).
Kann mir einer von euch sagen, wie ich den code umschreiben muss, damit es auch mit einer rcproject-Datei funktioniert?
Ich habe den Code und die zwei Dateien (.usdz und .rcprojekt) mal angehängt
Vielen lieben Dank für eure Hilfe.
ovidus
Quellcode
- import UIKit
- import RealityKit
- import ARKit
- class ViewController: UIViewController {
- @IBOutlet var arView: ARView!
- override func viewWillAppear(_ animated: Bool){
- super.viewWillAppear(true)
- arView.session.delegate = self
- setupCustomObjectView()
- let tabGesture = UITapGestureRecognizer(target: self, action: #selector(onTap))
- arView.addGestureRecognizer(tabGesture)
- }
- func setupCustomObjectView () {
- arView.automaticallyConfigureSession = false
- let configuration = ARWorldTrackingConfiguration()
- configuration.planeDetection = [.horizontal, .vertical]
- configuration.environmentTexturing = .automatic
- arView.session.run(configuration)
- }
- @IBAction func onTap(recognizer: UITapGestureRecognizer) {
- let location = recognizer.location(in: arView)
- let results = arView.raycast(from: location, allowing: .estimatedPlane, alignment: .horizontal)
- if let firstResult = results.first {
- let anchor = ARAnchor(name: "SpiralTest.rcproject“, transform: firstResult.worldTransform)
- arView.session.add(anchor: anchor)
- } else {
- print("Object placement failed")
- }
- }
- func placeObject(name entityName: String, for anchor:ARAnchor){
- let entity = try! ModelEntity.loadModel(named: entityName)
- entity.generateCollisionShapes(recursive: true)
- arView.installGestures([.rotation, .scale], for: entity)
- let anchorEntity = AnchorEntity(anchor: anchor)
- anchorEntity.addChild(entity)
- arView.scene.addAnchor(anchorEntity)
- }
- }
- extension ViewController: ARSessionDelegate {
- func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
- for anchor in anchors {
- if let anchorObject = anchor.name, anchorObject == "SpiralTest.rcproject“ {
- placeObject(name: anchorObject, for: anchor)
- }
- }
- }
- }