AR-Session erstellen und konfigurieren
Um AR in Unity zu verwenden, mussen Sie zuerst eine AR-Session in der Szene erstellen und konfigurieren. In diesem Artikel werden die wichtigsten Methoden zum Erstellen und Konfigurieren von AR-Sessions vorgestellt. Nach dem erfolgreichen Erstellen einer Session sehen Sie in der Regel die folgende Struktur in der Hierarchy-Ansicht:

Vor dem Start
- Verstehen Sie uber ARSession einfuhren die grundlegenden Konzepte, die Zusammensetzung und den Arbeitsablauf einer Session.
Session mit Standardkonfiguration erstellen
Klicken Sie in der Hierarchy-Ansicht mit der rechten Maustaste auf eine leere Flache und verwenden Sie das Menü EasyAR Sense > [ AR Function ] > AR Session ([ Function ] Preset), um eine vorbereitete Session zu erstellen. Die Session ist bereits mit Frame-Source- und Frame-Filter-Komponenten konfiguriert, die fur diese Funktion geeignet sind.
Im Skript konnen Sie ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) verwenden, um eine Session zu erstellen.
Zum Beispiel erstellt das Menü EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) eine Session fur Image Tracking.

Der entsprechende Skriptcode lautet:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);
Beachten Sie, dass bei der Verwendung der Presets ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder und ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder gleichzeitig Ressourcenparameter ubergeben werden mussen. Der folgende Code erstellt zum Beispiel eine Session fur Sparse Spatial Mapping und gibt das Point-Cloud-Material an:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });
Wenn das Skript nur im Editor lauft, konnen Sie auch die Standard-Editorressourcen verwenden:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());
Das Menü EasyAR Sense > AR Session (Preset) > ** listet alle verfugbaren Preset-Sessions als Referenz auf.

Anmerkung
Mehrere gleichzeitig laufende Sessions in derselben Szene konnen miteinander in Konflikt geraten, daher darf in der Szene hochstens eine aktivierte (GameObject.activeInHierarchy == true) Session verbleiben.
Komponenten hinzufugen
Die Frame-Source- und Frame-Filter-Komponenten der Session konnen nach dem Erstellen je nach Bedarf hinzugefugt und entfernt werden.
Wahlen Sie in der Hierarchy-Ansicht AR Session (EasyAR) aus, klicken Sie mit der rechten Maustaste und verwenden Sie das Menü EasyAR Sense > [ AR Function ] > **, um fur diese Funktion geeignete Frame-Source- und Frame-Filter-Komponenten hinzuzufugen.
Im Skript konnen Sie ARSessionFactory.AddFrameSource<Source>(GameObject, bool) verwenden, um eine Frame-Source-Komponente hinzuzufugen, oder ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources), um eine Frame-Filter-Komponente hinzuzufugen.
Zum Beispiel fugt das Menü EasyAR Sense > Image Tracking > Frame Filter : Image Tracker dem aktuell ausgewahlten Session-Objekt einen neuen Image Tracker hinzu.

Der entsprechende Skriptcode lautet:
ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Vorsicht
Das Hinzufugen von Komponenten muss vor dem Assemble abgeschlossen sein. Nachdem die Session mit dem Assemble beginnt oder das Assemble abgeschlossen ist, fuhrt jede Addition oder Entfernung von Komponenten dazu, dass die Session in den Zustand Broken wechselt und nicht mehr funktioniert.
Beachten Sie, dass beim Hinzufugen von SparseSpatialMapBuilderFrameFilter und DenseSpatialMapBuilderFrameFilter ebenfalls Ressourcenparameter gleichzeitig ubergeben werden mussen. Der folgende Code erstellt zum Beispiel einen SparseSpatialMapBuilderFrameFilter fur Sparse Spatial Mapping und gibt das Point-Cloud-Material an:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })
Wenn das Skript nur im Editor lauft, konnen Sie auch die Standard-Editorressourcen verwenden:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());
Nach dem Erstellen des Frame Filters konnen Sie ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) verwenden, um die Parameter des Frame Filters entsprechend der Preset-Konfiguration anzupassen.
Zum Beispiel fugt der folgende Code der Session einen neuen Image Tracker hinzu und konfiguriert ihn mit den Preset-Parametern von ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.
var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);
Bei der Erstellung uber das Menü konnen die Parameter nicht nach Presets angepasst werden; Sie mussen sie nach dem Erstellen entsprechend der jeweiligen Komponentenbeschreibung konfigurieren.
Komponenten entfernen
Um Komponenten aus der Session zu entfernen, konnen Sie in der Hierarchy-Ansicht die entsprechende Komponente auswahlen und die Delete-Taste drucken oder das entsprechende Objekt im Skript zerstoren (Destroy).
Anmerkung
Das Deaktivieren (SetActive(false)) des GameObject der Komponente hat denselben Effekt wie das Entfernen der Komponente.
Um zum Beispiel einen Image Tracker aus der Session zu entfernen, wahlen Sie Image Tracker aus und drucken Sie die Delete-Taste.

Vorsicht
Das Entfernen von Komponenten muss vor dem Assemble abgeschlossen sein. Nachdem die Session mit dem Assemble beginnt oder das Assemble abgeschlossen ist, fuhrt jede Addition oder Entfernung von Komponenten dazu, dass die Session in den Zustand Broken wechselt und nicht mehr funktioniert.
Einfluss der Komponentenreihenfolge
Die Reihenfolge der Frame-Filter-Kindknoten der Session hat keinen Einfluss auf die Ausfuhrung der Session.
Die Reihenfolge der Frame-Source-Kindknoten der Session beeinflusst jedoch die Auswahlreihenfolge der Frame Sources wahrend des Assemble-Vorgangs. Nur die erste verfugbare Frame Source in Transform-Reihenfolge wird als tatsachliche Frame Source der Session ausgewahlt.
Anmerkung
Die Reihenfolge der Frame-Source-Knoten ist nur dann wirksam, wenn sie vor dem Assemble geandert wird. Nach dem Assemble beeinflusst eine Anpassung der Reihenfolge das Laufergebnis nicht mehr.
[Optional] Session frei erstellen
Wenn die standardkonfigurierte Session die Anforderungen nicht erfullt, konnen Sie die Session auch frei nach Bedarf erstellen und konfigurieren.
Mit dem Menü EasyAR Sense > AR Session (Preset) > AR Session (Empty) konnen Sie eine leere Session ohne Frame-Source- und Frame-Filter-Komponenten erstellen.
Im Skript konnen Sie ARSessionFactory.CreateSession() verwenden, um dies zu erreichen.
ARSessionFactory.CreateSession();
Fugen Sie dann je nach Bedarf geeignete Frame-Source- und Frame-Filter-Komponenten hinzu.
Wenn Sie zum Beispiel eine Session mit Sparse Spatial Mapping und Dense Spatial Mapping erstellen mochten, konnen Sie den folgenden Code verwenden:
var session = ARSessionFactory.CreateSession();
var group = new GameObject("Frame Source Group");
group.transform.SetParent(session.transform, false);
ARSessionFactory.AddFrameSource<XREALFrameSource>(session);
ARSessionFactory.AddFrameSource<AREngineFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<VisionOSARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<MotionTrackerFrameSource>(session);
List<GameObject> filters = new();
filters.Add(ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, resources));
filters.Add(ARSessionFactory.AddFrameFilter<DenseSpatialMapBuilderFrameFilter>(session, resources));
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder);
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder);
Dadurch wird eine Session-Struktur wie die folgende erstellt:

Nachste Schritte
Steuerung der Ausfuhrung
- Erfahren Sie mehr uber Initialisierung und ihre Funktion
- Erfahren Sie, wie Sie Verfugbarkeit und Gerateunterstutzung bestimmen
- Erfahren Sie mehr uber das Steuern der Session-Ausfuhrung
Auf Komponenten und Ergebnisse zugreifen
- Versuchen Sie, auf AR-Funktionskomponenten zuzugreifen
- Erfahren Sie, wie Sie Session-Laufergebnisse abrufen
Komponentenreferenz
- ARSession Komponentenreferenz