swift - einbinden .usdz funktioniert, aber einbinden .rcproject funktioniert nicht.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • swift - einbinden .usdz funktioniert, aber einbinden .rcproject funktioniert nicht.

    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

    Quellcode

    1. import UIKit
    2. import RealityKit
    3. import ARKit
    4. class ViewController: UIViewController {
    5. @IBOutlet var arView: ARView!
    6. override func viewWillAppear(_ animated: Bool){
    7. super.viewWillAppear(true)
    8. arView.session.delegate = self
    9. setupCustomObjectView()
    10. let tabGesture = UITapGestureRecognizer(target: self, action: #selector(onTap))
    11. arView.addGestureRecognizer(tabGesture)
    12. }
    13. func setupCustomObjectView () {
    14. arView.automaticallyConfigureSession = false
    15. let configuration = ARWorldTrackingConfiguration()
    16. configuration.planeDetection = [.horizontal, .vertical]
    17. configuration.environmentTexturing = .automatic
    18. arView.session.run(configuration)
    19. }
    20. @IBAction func onTap(recognizer: UITapGestureRecognizer) {
    21. let location = recognizer.location(in: arView)
    22. let results = arView.raycast(from: location, allowing: .estimatedPlane, alignment: .horizontal)
    23. if let firstResult = results.first {
    24. let anchor = ARAnchor(name: "SpiralTest.rcproject“, transform: firstResult.worldTransform)
    25. arView.session.add(anchor: anchor)
    26. } else {
    27. print("Object placement failed")
    28. }
    29. }
    30. func placeObject(name entityName: String, for anchor:ARAnchor){
    31. let entity = try! ModelEntity.loadModel(named: entityName)
    32. entity.generateCollisionShapes(recursive: true)
    33. arView.installGestures([.rotation, .scale], for: entity)
    34. let anchorEntity = AnchorEntity(anchor: anchor)
    35. anchorEntity.addChild(entity)
    36. arView.scene.addAnchor(anchorEntity)
    37. }
    38. }
    39. extension ViewController: ARSessionDelegate {
    40. func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
    41. for anchor in anchors {
    42. if let anchorObject = anchor.name, anchorObject == "SpiralTest.rcproject“ {
    43. placeObject(name: anchorObject, for: anchor)
    44. }
    45. }
    46. }
    47. }
    Alles anzeigen
    Dateien
    • SpiralTest.zip

      (742,5 kB, 107 mal heruntergeladen, zuletzt: )
  • Vielleicht hilft Dir dies weiter: Previewing a Model with AR Quick Look

    Anscheinend konvertiert Xcode .rcproject files automatisch zu .reality und fügt diese dem App Bundle hinzu.

    Note schrieb:

    If you include a Reality Composer file (.rcproject) in your app's Copy Files build phase, Xcode automatically outputs a converted .reality file in your app bundle at build time.

    Du solltest also ein .reality File im App Bundle haben, welches Du in der App verwenden kannst.
  • Hi MCDan,
    vielen Dank für dein Antwort. Klingt logisch und ich habe es gerade versucht. Hab eine .reality-Datei in den entsprechenden Ordner im Projekt gelegt. Die App startet auch korrekt, aber wenn ich auf den Bildschirm klicke, um das Objekt zu positionieren, bekomme ich eine Fehlermeldung hinter der Zeile mit "let entity = try! ...":

    Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: RealityKit.Entity.LoadError.resourceNotFound("SpiralTest.reality")

    Er erkennt also die Ressource nicht, oder er erwartet sie an einem anderen Ort. Oder muss ich in Xcode die rcproject Datei drin lassen, damit eine reality Datei erstellt wird?

    Voelen Dank