Gestensteuerung bei Gruppen funktioniert nicht

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

  • Gestensteuerung bei Gruppen funktioniert nicht

    Hallo zusammen,

    ich bin es mal wieder. Nach langem Probieren habe ich es dann doch noch hinbekommen und ein einfaches Objekt mit Gesten bewegen/skalieren/rotieren können. Im Nachhinein betrachtet war es eigentlich ganz einfach. Wenn man weis, wie man es machen muss.
    Jetzt habe ich aber ein neues Problem. Vielleicht wäret ihr noch mal so nett und helft mir.

    Ich habe mir die Augmented Reality Grunddatei in Xcode genommen (die mit der Experience.rcproject Datei darin). Ich habe diesen Code im ViewController eingegeben:

    Quellcode

    1. import UIKit
    2. import RealityKit
    3. class ViewController: UIViewController {
    4. @IBOutlet var arView: ARView!
    5. override func viewDidLoad() {
    6. super.viewDidLoad()
    7. // Load the "Box" scene from the "Experience" Reality File
    8. let boxAnchor = try! Experience.loadBox()
    9. if let box = boxAnchor.steelBox?.children.first as? ModelEntity {
    10. box.generateCollisionShapes(recursive: true)
    11. arView.installGestures(.all, for: box)
    12. }
    13. // Add the box anchor to the scene
    14. arView.scene.anchors.append(boxAnchor)
    15. }
    16. }
    Alles anzeigen

    Und es funktioniert. Das Objekt, also der Würfel, läßt sich mit Gesten steuern.

    Dann habe ich im RealityComposer (aus Xcode heraus) ein zweites Objekt (ich habe den Würfel dupliziert) erstellt, neu benannt und mit dem ersten Würfel gruppiert. Die Gruppe habe ich "boxGroup" genannt. Dann habe ich den Code entsprechend angepasst, dass der Verweis nicht mehr auf "steelBox" geht, sondern auf "boxGroup". Aber jetzt geht die Gestensteuerung nicht mehr.
    Hier der Code dazu:

    Quellcode

    1. import UIKit
    2. import RealityKit
    3. class ViewController: UIViewController {
    4. @IBOutlet var arView: ARView!
    5. override func viewDidLoad() {
    6. super.viewDidLoad()
    7. // Load the "Box" scene from the "Experience" Reality File
    8. let boxAnchor = try! Experience.loadBox()
    9. if let box = boxAnchor.boxGroup?.children.first as? ModelEntity {
    10. box.generateCollisionShapes(recursive: true)
    11. arView.installGestures(.all, for: box)
    12. }
    13. // Add the box anchor to the scene
    14. arView.scene.anchors.append(boxAnchor)
    15. }
    16. }
    Alles anzeigen
    Was mache ich falsch?

    Ich habe den Befehl "print (boxAnchor)" hinzugefügt und bekommen nun eine Auflistung. Da ist mit aufgefallen, dass die Würfel als modelEntity definiert sind, während die Gruppe ein Entity ist. Hat das etwas mit meinem Problem zu tun?

    Danke für eure Hilfe.

    Thomas

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ovidus ()

  • Halllo zusammen,

    ich habe es selber herausgefunden. Ok, mit etwas Hilfe aus Fernost.
    Für das Beispiel dient die Grunddatei, die sich öffnet, wenn man als Projekt "Augmented Reality" wählt.
    Die RealityComposer Datei heißt "Experience.rcproject". Die Szene in "Experience.rcproject" heißt "Box"
    Zunächst brauchen wir natürlich eine Gruppe. Die erzeugen wir im RealityComposer (aus Xcode heraus). Wir öffnen Experience.rcproject und klickt im 3d-Fenster auf "Open in RealityComposer". Ein Würfel ist bereits vorhanden. Also erstellen wir eine weitere Geometrie und gruppieren (Menü) beide Objekte. Die Gruppe benennen wir um in "boxGroup" (damit der Code funktioniert).

    Dann den Code in den ViewController eingeben.
    !! Bitte beachten: Die im Code erzeugte transparente box kann man noch schemenhaft erkennen. Hier suche ich noch nach einer Lösung, sodass sie gar nicht zu sehen ist. Man kann die Box aber ganz groß machen.
    !! Die transparente Box darf auch nicht auf null skaliert werden, denn dann funktioniert die Gestensteuerung nicht mehr.

    Viel Spaß beim nachbauen.

    Quellcode

    1. import UIKit
    2. import RealityKit
    3. class ViewController: UIViewController {
    4. @IBOutlet var arView: ARView!
    5. override func viewDidLoad() {
    6. super.viewDidLoad()
    7. // Load Scene
    8. let sceneAnchor = try! Experience.loadBox()
    9. // Create transparent box
    10. let transparentBox = ModelEntity(mesh: .generateBox(size: [1.0,1.0,1.0]),materials: [SimpleMaterial(color: .clear, isMetallic: false)])
    11. // Load group of geometry
    12. let boxEntity = sceneAnchor.findEntity(named: "boxGroup")
    13. // Add group of geometry to transparent box
    14. transparentBox.addChild(boxEntity!)
    15. // Add collision and gestures to transparent box
    16. transparentBox.generateCollisionShapes(recursive: true)
    17. arView.installGestures(.all, for: transparentBox)
    18. // Add plane Anchor
    19. let anchor = AnchorEntity(plane: .horizontal)
    20. // Add transparent box to anchor
    21. anchor.addChild(transparentBox)
    22. // Add anchor to scene
    23. arView.scene.anchors.append(anchor)
    24. }
    25. }
    Alles anzeigen