デバイスサポートとセッションレポート
デバイスのハードウェアや性能の違いにより、AR機能は多くの場合、すべてのデバイスで動作するわけではありません。したがって、AR機能を使用する際には、現在のデバイスのサポート状況を正確に判断することが非常に重要です。このドキュメントでは、Unityにおいてデバイスの可用性がどのように表現されるか、およびセッションレポート(ARSession.Report)を通じてデバイスサポートとセッションの可用性情報を取得する方法について説明します。
開始前に
- ARSession の概要 を参照し、セッションの基本概念、構成要素、およびワークフローを理解してください
デバイスサポート、セッション可用性とアセンブル
各AR機能がサポートするデバイスは異なります。例えば、モーショントラッキングはハードウェアコンポーネントにある程度の要件があり、通常はデバイスのキャリブレーションが必要ですが、イメージトラッキング機能はカメラが使用可能なほぼすべてのデバイスで動作します。したがって、特定のARアプリケーションが特定のデバイスで実行可能かどうかを判断するには、通常、現在どのAR機能を使用しているかを知る必要があります。言い換えれば、特定のセッションがデバイス上で実行可能かどうかを判断する必要があります。
Unityでは、上記の判断プロセスはセッションのアセンブル(Assemble())段階で行われます。アセンブルプロセスでは、セッションに含まれるコンポーネントと現在のデバイスのサポート状況に基づいて、セッション起動前の最終状態が決定されます。
アセンブルが成功した場合、セッションは Ready 状態になり、起動および実行を継続できます。アセンブルが失敗した場合、セッションは Broken 状態になり、セッションレポート(ARSession.Report)を通じて具体的な失敗理由を照会できます。
セッションレポート
ARSession.Report プロパティは、セッションの実行レポートを提供します。セッションレポートには以下のフィールドが含まれます:
| プロパティ | 説明 |
|---|---|
| Availability | 完全な可用性レポート |
| BrokenReason | セッションの破損理由(セッション状態が Broken の場合に有効) |
| Exception | セッション破損の具体的な例外(セッション状態が Broken の場合に有効) |
セッションレポートでは、Availability を使用して各コンポーネントの可用性を照会したり、BrokenReason を使用してセッションが破損した際に破損の詳細な理由を照会したりできます。
セッションレポートの例
例えば、Windows 上で、セッションに ImageTrackerFrameFilter、CameraDeviceFrameSource、およびその他のいくつかの frame source コンポーネントが含まれている場合、アセンブルプロセスは各コンポーネントの可用性をチェックし、以下のようなレポートを生成します:

図では、ARCoreFrameSource コンポーネントの Availability が Unavailable ですが、ImageTrackerFrameFilter と CameraDeviceFrameSource の Availability が両方とも Available であるため、セッション全体のアセンブルは成功し、セッションは正常に Ready 状態に移行しています。
CameraDeviceFrameSource をセッションから削除すると、アセンブルプロセスは以下のレポートを生成します:

FrameSources リストの数が9から8に減少し、ImageTrackerFrameFilter コンポーネントの Availability は依然として Available ですが、使用可能な frame source コンポーネントがないため、セッション全体のアセンブルは失敗し、セッションは Broken 状態になります。この時、レポートの BrokenReason フィールドの値は NoAvailabileFrameSource であり、使用可能な frame source がないことを示しています。
アセンブルプロセス以外でも、セッションの実行中にコンポーネントが意図せず削除されるなどして破損する可能性があります。その場合も、セッションレポートを使用して具体的な破損理由を照会できます。
レポートの更新
セッションレポートは以下のタイミングで変化します:
アセンブル第1段階の完了
この時点で、コンポーネントの可用性レポートを含む完全なセッションレポートが生成されます。セッションレポートの Availability 部分はこの時点で確定され、以降変更されません。
コンポーネント可用性レポートの更新は、AssembleUpdate イベントを通じて取得できます。
アセンブル後に直接セッションを起動した場合、StateChanged イベントを通じてセッションレポートの更新を取得することもできます。注目すべきセッションの状態は次のとおりです:Ready および Broken。アセンブル第2段階の完了
この時点で、新しいコンポーネント可用性レポートが生成されます。セッションが再起動されない限り、セッションレポートは更新されません。
コンポーネント可用性レポートの更新は、AssembleUpdate イベントを通じて取得できます。セッション起動時または実行中にセッションが破損した場合
セッションレポートの BrokenReason と Exception が更新されます。
セッションレポートの更新は、StateChanged イベントを通じて取得できます。注目すべきセッションの状態は次のとおりです:Broken。
レポート内容:セッション破損の理由
BrokenReason は、セッションが破損した理由を示し、以下のようなケースがあります:
| 理由 | 説明 |
|---|---|
| Uninitialized | アセンブルプロセス中、EasyAR Sense の初期化に失敗した |
| LicenseInvalid | アセンブルプロセス中、EasyAR Sense ライセンスの検証に失敗した、または現在の使用に適用されない |
| SessionObjectIncomplete | アセンブルプロセス中、セッションオブジェクトが不完全(例:URP で RendererFeature が正しく設定されていない) |
| NoAvailabileFrameSource | アセンブルプロセス中、使用可能な frame source がない(例:すべての frame source が使用不可、または frame source が追加されていない)。デフォルトのセッション構成下でのみ、この状況はデバイスが現在選択されているAR機能をサポートしていないことを示す |
| FrameSourceIncomplete | アセンブルプロセス中、frame source が不完全(主にカスタム frame source を実装する際に frame source インターフェースが正しく実装されていない場合に発生) |
| FrameFilterNotAvailabile | アセンブルプロセス中、使用不可の frame filter が存在する(一部のアセンブルオプションでのみ発生) |
| StartFailed | 起動に失敗(例:起動プロセス中に例外が発生した) |
| RunningFailed | 実行中に失敗(例:実行中のコンポーネントが意図せず削除された、URP で RendererFeature が正しく設定されていないなど) |
レポート内容:可用性情報
Availability は、セッション内の各コンポーネントの可用性情報を提供します。これには以下のフィールドが含まれます:
| フィールド | 説明 |
|---|---|
| FrameFilters | アセンブルプロセスでチェックされた frame filter の可用性リスト |
| FrameSources | アセンブルプロセスでチェックされた frame source の可用性リスト |
| PendingDeviceList | 未完了のデバイスリストダウンロードタスク |
| DeviceList | デバイスリストダウンロード結果 |
ここで、PendingDeviceList と DeviceList フィールドは、デバイスサポートリストのダウンロード状態を表すために使用されます。アセンブル第1段階が完了した時点で、PendingDeviceList が空でない場合にのみ、アセンブルは第2段階に進みます。この条件を使用して、AssembleUpdate が2回目に実行されるかどうかを判断できます。
次のステップ
- 可用性とデバイスサポートの判断 を試す