Table of Contents

EasyAR の Unity XR フレームワークサポート

EasyAR は AR 機能を提供するために Unity XR フレームワークに依存しませんが、Unity で EasyAR の AR 機能を使用する際に Unity XR フレームワークが提供する機能を活用できるよう、Unity XR フレームワークの一部コンポーネントパッケージをサポートしています。以下では、EasyAR の Unity XR フレームワークサポート状況と、AR Foundation の使用を検討すべき状況について説明します。

Unity XR サポート

Unity は プラグインフレームワークと一連の機能パッケージおよびツールキット を通じて XR 開発をサポートしています。EasyAR もこれらの Unity XR コンポーネントパッケージをサポートしており、Unity で EasyAR の AR 機能を使用する際に Unity XR フレームワークが提供する機能を活用できます。

EasyAR は以下の Unity XR コンポーネントパッケージをサポートします:

表示名 パッケージ名 最低サポートバージョン 必須か 用途
XR Core Utilities com.unity.xr.core-utils 2.0.0 いいえ Unity.XR.CoreUtils.XROrigin サポートを提供
AR Foundation com.unity.xr.arfoundation 5.0.0 いいえ AR Foundation サポートを提供
XR Plugin Management com.unity.xr.management 3.0.0 いいえ ARCore SDK 管理互換性およびランタイム XR Loader タイプ取得を提供
XR Interaction Toolkit com.unity.xr.interaction.toolkit 2.0.0 いいえ 直接使用しない
PolySpatial visionOS com.unity.polyspatial.visionos 2.0.41 いいえ 直接使用しない
com.unity.xr.visionos 2.0.41 いいえ 直接使用しない
Apple ARKit XR Plugin com.unity.xr.arkit 5.0.0 いいえ 直接使用しない
com.unity.xr.arcore 5.0.0 いいえ ARCore SDK 管理互換性を提供
注記

EasyAR は AR 機能を提供するために Unity XR フレームワークに依存しません。したがって、AR Foundation などの Unity XR コンポーネントを使用する必要がない場合は、これらのパッケージをインストールしなくても、EasyAR はサポート対象デバイスで正常に動作します。

AR Foundation サポート

AR Foundation は Unity が提供する AR 開発フレームワークであり、その AR 機能は下層システムまたはサードパーティによって実装され、ARCore、ARKit および一部ヘッドセットのサポートによく使用されます。

EasyAR と AR Foundation の関係

block
  columns 6
  block:groupApp:6
    block:groupAppWrapper
      space
      App1["EasyAR<br>アプリ"]
      space
      App2["EasyAR + AR Foundation<br>アプリ"]
      space
      App3["AR Foundation<br>アプリ"]
    end
  end
  
  block:groupSensePlugin:4
    columns 1
    SensePlugin["EasyAR Sense Unity Plugin"]
    space
  end
  block:groupARF
    columns 1
    ARF["AR Foundation"]
    space
  end
  block:groupXRI
    columns 1
    XRI["XR Interaction Toolkit"]
    space
  end
  
  block:groupAREngineInterop
    columns 1
    AREngineInterop["EasyAR<br>AR Engine Interop"]
    space
  end  
  block:groupSense:3
    columns 1
    Sense["EasyAR Sense"]
    block:groupSenseWrapper
      Image["Image<br>tracker"]
      Object["Sparse<br>SpatialMap"]
      MotionTracker["Motion<br>tracker"]
      MARCore["ARCore"]
      MARKit["ARKit"]
      Others["..."]
    end
  end
  block:groupXRSubsystem:2
    columns 1
    XRSubsystem["XR Subsystems"]
    XRSDK["Unity XR SDK"]
  end

  block:groupSystem:6
    columns 1
    System["System library"]
    block:groupSystemWrapper
      space
      AREngine["AR Engine<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      ARCore["ARCore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      ARKit["ARKit<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"] 
      space
    end
  end
  
  SensePlugin --> App1
  SensePlugin --> App2
  ARF --> App2
  ARF --> App3
  groupSense --> SensePlugin
  groupAREngineInterop --> SensePlugin
  AREngine --> groupAREngineInterop
  XRSubsystem --> ARF
  XRSubsystem --> XRI
  ARCore --> MARCore
  ARKit --> MARKit
  ARCore --> XRSDK
  ARKit --> XRSDK
  
  style groupApp fill:none,stroke:none,stroke-width:0px
  style groupAppWrapper fill:none,stroke:none,stroke-width:0px
  style groupSensePlugin fill:none,stroke:none,stroke-width:0px
  style groupARF fill:none,stroke:none,stroke-width:0px
  style groupXRI fill:none,stroke:none,stroke-width:0px
  style AREngineInterop fill:none,stroke:none,stroke-width:0px,color:#fff
  style Sense fill:none,stroke:none,stroke-width:0px,color:#fff
  style groupSenseWrapper fill:none,stroke:none,stroke-width:0px
  style XRSubsystem fill:none,stroke:none,stroke-width:0px,color:#fff
  style System fill:none,stroke:none,stroke-width:0px
  style groupSystemWrapper fill:none,stroke:none,stroke-width:0px

  classDef EasyAR fill:#6e6ce6,stroke:#333,color:#fff
  class groupAREngineInterop EasyAR
  class groupSense EasyAR
  class SensePlugin EasyAR

  classDef Unity fill:#636,stroke:#333,color:#fff
  class groupXRSubsystem Unity
  class ARF Unity
  class XRI Unity

EasyAR と AR Foundation は独立した 2 つの AR フレームワークであり、EasyAR は AR 機能を実現するために AR Foundation に依存しません。EasyAR はシステム内の ARKit、ARCore などのシステムライブラリを通じてモーショントラッキング機能を実現することもできます。同時に、EasyAR は AR Foundation が提供しない 2 つのモーショントラッキング実装(EasyAR 自身の実装と AR Engine による実装)を提供し、AR Foundation よりも広範なデバイスサポートを実現しています。

また、EasyAR は AR Foundation ランタイムのデータを取得でき、AR Foundation ランタイムで提供されるモーショントラッキング機能を利用して他の AR 機能を駆動し、AR Foundation への互換性を提供します。これらの機能には以下が含まれます:

  • Mega
  • 疎空間マップ
  • 密空間マップ
  • モーションフュージョンを使用した画像トラッキングおよび物体トラッキング

モーショントラッキングと EasyAR 機能の関係の詳細については、モーショントラッキングと EasyAR 機能 を参照してください。

AR Foundation を使用すべき状況

ほとんどの場合、AR Foundation を使用せずとも、EasyAR は AR Foundation がサポートするよりも広範なデバイスで正常に動作します。通常、以下の 2 つの状況で AR Foundation の使用を検討できます:

  1. EasyAR がカプセル化していない ARKit または ARCore 機能を使用する必要がある場合

    ARCore または ARKit が提供する機能のうち EasyAR でカプセル化されていないものを使用する必要がある場合、AR Foundation を使用できます。例えば、AR Foundation は ARKit の顔トラッキングサポート ARFaceManager を提供しますが、EasyAR はこの機能をカプセル化していません。

  2. システムに問題がある一部の Xiaomi スマートフォンで、EasyAR 実装のモーショントラッキングではなく ARCore を使用する場合

    ARCore をサポートするすべての Xiaomi および Redmi スマートフォンで ARCore を使用する必要がある場合は、AR Foundation を有効化することを検討してください。一部の Xiaomi および Redmi スマートフォンはシステムに問題があるため、EasyAR の ARCore カプセル化はこれらのデバイス(Mi 9、Mi 10、Redmi K20、Redmi K30、Redmi K40 シリーズなど、完全なリストではなくデバイスサポートは継続的に更新)をサポートしません。これらのスマートフォンでは、デフォルト設定では ARCore が使用されず、EasyAR モーショントラッキングをサポートするデバイスでは EasyAR モーショントラッキングが使用されます。

AR Foundation を使用する場合、EasyAR の機能効果は最適ではありません。以下の 2 つの状況が存在します:

  1. EasyAR が直接サポートしない一部の Xiaomi および Redmi スマートフォンでは、EasyAR に入力されるデータはカラー画像ではなくグレースケール画像となり、一部のアルゴリズムの効果に影響します。デバイス自体の問題によるものであり、設定で解決することはできません。
  2. Mega を使用する場合、AR Foundation がデフォルトで使用する設定は最適ではありません。
注意

AR Foundation の ARCameraManager.currentConfiguration を変更することでより最適なデータ入力を取得できます。ARCoreARFoundationFrameSource.OptimizeConfigurationForTracking を有効化すると、最適な ARCameraManager.currentConfiguration 選択が自動的に行われます。ただし、一部のスマートフォン(例:Xiaomi 10)自体に問題があり、設定変更後に画像を取得できない場合、EasyAR は使用不能になることに注意してください(アプリには画像背景が表示されますが EasyAR 機能は反応しません)。そのため、通常は有効化を推奨せず、使用する場合は EasyAR が使用不能になった際のフォールバック対策を準備する必要があります。

ヘッドセットサポート

Unity XR フレームワークは十分なデータインターフェースを提供しないため、EasyAR は Unity XR フレームワークを通じてヘッドセットをサポートしません。

Unity XR フレームワークをサポートするヘッドセット上では、EasyAR は XR Core Utilities を通じて Unity.XR.CoreUtils.XROrigin の使用をサポートしますが、ヘッドセットサポートを実現するために Unity XR フレームワークを使用しません。EasyAR は XR Interaction Toolkit の機能に影響を与えず、デバイスがサポートしていれば正常に使用できます。

一般的に、ヘッドセットメーカーは各々 SDK またはシステムインターフェースを提供してこれらのデータを取得します。EasyAR はシステムインターフェースおよびメーカー SDK を通じてヘッドセットをサポートします。これらの SDK が完全に公開されていない場合もありますが、EasyAR はメーカーと協力して完全なサポートを提供します。Unity でのヘッドセットサポート では、EasyAR がサポートするヘッドセットとその使用方法について説明しています。

次のステップ

関連トピック


  1. Unity 6 以降では、最低サポートバージョンは 2.0.4。Unity 2022.3 では、最低サポートバージョンは 1.2.3(1.3.x は非対応)。