Geräteunterstützung und session report
Aufgrund von Unterschieden bei Gerätehardware und Leistung können AR-Funktionen oft nicht auf allen Geräten ausgeführt werden. Daher ist es bei der Verwendung von AR-Funktionen sehr wichtig, die Unterstützung des aktuellen Geräts genau zu beurteilen. Dieser Artikel beschreibt, wie Geräteverfügbarkeit in Unity ausgedrückt wird und wie Informationen zu Geräteunterstützung und session-Verfügbarkeit über den session report (ARSession.Report) abgerufen werden.
Vor dem Start
- Lernen Sie über die ARSession-Einführung die Grundkonzepte, Zusammensetzung und den workflow einer session kennen
Geräteunterstützung, session-Verfügbarkeit und Assembly
Die von jeder AR-Funktion unterstützten Geräte sind unterschiedlich. Motion tracking stellt zum Beispiel bestimmte Anforderungen an Hardwarekomponenten und erfordert normalerweise eine Gerätekalibrierung, während image tracking auf nahezu allen Geräten mit verfügbarer Kamera laufen kann. Um zu beurteilen, ob eine AR-Anwendung auf einem bestimmten Gerät laufen kann, muss man daher in der Regel wissen, welche AR-Funktionen aktuell verwendet werden, oder anders gesagt, ob eine bestimmte session auf dem Gerät laufen kann.
In Unity wird dieser Beurteilungsprozess in der Phase der session assembly (Assemble()) abgeschlossen. Der Assembly-Prozess entscheidet anhand der in der session enthaltenen Komponenten und der Unterstützung des aktuellen Geräts über den endgültigen Zustand vor dem Start der session.
Wenn die Assembly erfolgreich ist, wechselt die session in den Zustand Ready und kann gestartet und weiter ausgeführt werden. Wenn die Assembly fehlschlägt, wechselt die session in den Zustand Broken, und der konkrete Fehlergrund kann über den session report (ARSession.Report) abgefragt werden.
Session report
Die Eigenschaft ARSession.Report stellt den runtime-Bericht der session bereit. Ein session report enthält folgende Felder:
| Eigenschaft | Beschreibung |
|---|---|
| Availability | Vollständiger Verfügbarkeitsbericht |
| BrokenReason | Grund für die beschädigte session, gültig wenn der session-Zustand Broken ist |
| Exception | Konkrete Exception der beschädigten session, gültig wenn der session-Zustand Broken ist |
Im session report können Sie über Availability die Verfügbarkeit jeder Komponente abfragen oder über BrokenReason den detaillierten Grund abfragen, wenn die session beschädigt ist.
Beispiel für einen session report
Wenn eine session unter Windows beispielsweise ImageTrackerFrameFilter, CameraDeviceFrameSource und mehrere andere frame source-Komponenten enthält, prüft der Assembly-Prozess die Verfügbarkeit jeder Komponente und erzeugt folgenden Bericht:

Man sieht, dass Availability der Komponente ARCoreFrameSource zwar Unavailable ist, aber weil Availability von ImageTrackerFrameFilter und CameraDeviceFrameSource beide Available sind, ist die Assembly der gesamten session erfolgreich, und die session wechselt erfolgreich in den Zustand Ready.
Wenn wir CameraDeviceFrameSource aus der session entfernen, erzeugt der Assembly-Prozess folgenden Bericht:

Man sieht, dass die Anzahl in der Liste FrameSources von 9 auf 8 sinkt. Obwohl Availability der Komponente ImageTrackerFrameFilter weiterhin Available ist, schlägt die Assembly der gesamten session fehl, weil keine verfügbare frame source-Komponente vorhanden ist, und die session wechselt in den Zustand Broken. Zu diesem Zeitpunkt ist der Wert des Feldes BrokenReason im Bericht NoAvailabileFrameSource, was bedeutet, dass keine verfügbare frame source vorhanden ist.
Neben dem Assembly-Prozess kann eine session auch während der Laufzeit beschädigt werden, zum Beispiel wenn eine laufende Komponente versehentlich entfernt wird. Auch dann kann der konkrete Grund über den session report abgefragt werden.
Berichtsaktualisierung
Der session report ändert sich zu folgenden Zeitpunkten:
Abschluss der ersten Assembly-Phase
Zu diesem Zeitpunkt wird ein vollständiger session report einschließlich Komponenten-Verfügbarkeitsbericht erzeugt. Der Abschnitt Availability des session report wird zu diesem Zeitpunkt festgelegt und ändert sich danach nicht mehr. Aktualisierungen des Komponenten-Verfügbarkeitsberichts können über das Ereignis AssembleUpdate abgerufen werden.
Wenn die session nach der Assembly direkt gestartet wird, können Aktualisierungen des session report auch über das Ereignis StateChanged abgerufen werden. Die zu beachtenden session-Zustände umfassen: Ready und Broken.Abschluss der zweiten Assembly-Phase Zu diesem Zeitpunkt wird ein neuer Komponenten-Verfügbarkeitsbericht erzeugt. Sofern die session nicht neu gestartet wird, wird der session report nicht aktualisiert. Aktualisierungen des Komponenten-Verfügbarkeitsberichts können über das Ereignis AssembleUpdate abgerufen werden.
Beim Start der session oder wenn die session während der Laufzeit beschädigt wird
BrokenReason und Exception im session report werden aktualisiert. Aktualisierungen des session report können über das Ereignis StateChanged abgerufen werden. Der zu beachtende session-Zustand umfasst: Broken.
Berichtsinhalt: Gründe für eine beschädigte session
BrokenReason bezeichnet den Grund für die beschädigte session. Es gibt folgende Fälle:
| Grund | Beschreibung |
|---|---|
| Uninitialized | Assembly-Prozess: EasyAR Sense wurde nicht erfolgreich initialisiert |
| LicenseInvalid | Assembly-Prozess: EasyAR Sense-license-Prüfung fehlgeschlagen oder nicht für die aktuelle Verwendung geeignet |
| SessionObjectIncomplete | Assembly-Prozess: session object unvollständig. Zum Beispiel ist RendererFeature in URP nicht korrekt konfiguriert |
| NoAvailabileFrameSource | Assembly-Prozess: keine verfügbare frame source. Zum Beispiel sind alle frame sources nicht verfügbar oder es wurde keine frame source hinzugefügt. Nur in der Standardkonfiguration der session weist dieser Fall auf die Geräteunterstützung für die aktuell ausgewählte AR-Funktion hin |
| FrameSourceIncomplete | Assembly-Prozess: frame source unvollständig. Tritt meist auf, wenn eine custom frame source das frame source interface nicht korrekt implementiert |
| FrameFilterNotAvailabile | Assembly-Prozess: ein nicht verfügbarer frame filter ist vorhanden. Dieser Fall existiert nur unter einigen Assembly-Optionen. |
| StartFailed | Start fehlgeschlagen. Zum Beispiel tritt während des Starts eine Exception auf |
| RunningFailed | Laufzeit fehlgeschlagen. Zum Beispiel wurde eine laufende Komponente versehentlich entfernt oder RendererFeature in URP nicht korrekt konfiguriert. |
Berichtsinhalt: Verfügbarkeitsinformationen
Availability stellt Verfügbarkeitsinformationen für jede Komponente in der session bereit. Es enthält folgende Felder:
| Feld | Beschreibung |
|---|---|
| FrameFilters | Liste der während der Assembly geprüften frame filter-Verfügbarkeit |
| FrameSources | Liste der während der Assembly geprüften frame source-Verfügbarkeit |
| PendingDeviceList | Nicht abgeschlossene Download-Aufgabe für die Geräteliste |
| DeviceList | Download-Ergebnis der Geräteliste |
Die Felder PendingDeviceList und DeviceList werden verwendet, um den Download-Status der Geräteunterstützungsliste darzustellen. Wenn die erste Assembly-Phase abgeschlossen ist, tritt die Assembly genau dann in die zweite Phase ein, wenn PendingDeviceList nicht leer ist. Mit dieser Bedingung kann beurteilt werden, ob AssembleUpdate ein zweites Mal ausgeführt wird.
Nächste Schritte
- Versuchen Sie, Verfügbarkeit und Geräteunterstützung zu beurteilen