Table of Contents

Unity XR フレームワークに対する EasyAR のサポート

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

Unity XR サポート

Unity は plugin framework と一連の feature package および toolkit によって 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 管理互換性と runtime XR Loader タイプ取得を提供
XR Interaction Toolkit com.unity.xr.interaction.toolkit 2.0.0 いいえ 直接使用しない
PolySpatial visionOS com.unity.polyspatial.visionos 2.0.41 いいえ 直接使用しない
Apple visionOS XR Plugin com.unity.xr.visionos 2.0.41 いいえ 直接使用しない
Apple ARKit XR Plugin com.unity.xr.arkit 5.0.0 いいえ 直接使用しない
Google ARCore XR Plugin 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>App"]
      space
      App2["EasyAR + AR Foundation<br>App"]
      space
      App3["AR Foundation<br>App"]
    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 などのシステムライブラリを通じて motion tracking 能力を実装することもできます。同時に、EasyAR は AR Foundation にはない 2 種類の motion tracking 実装、すなわち EasyAR 自身の motion tracking 実装と AR Engine による motion tracking 実装を提供し、AR Foundation より広範なデバイスサポートを提供します。

また、EasyAR は AR Foundation runtime のデータを取得し、AR Foundation runtime が提供する motion tracking 能力を利用して他の AR 機能を駆動できるため、AR Foundation との互換性を提供します。これらの機能には以下が含まれます:

  • Mega
  • Sparse spatial map
  • Dense spatial map
  • motion fusion を使用する image tracking と object tracking

motion tracking と EasyAR 機能の関係の詳細については、motion tracking と EasyAR 機能を参照してください。

AR Foundation を使用する必要がある場合

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

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

    使用したい ARCore または ARKit の一部機能が EasyAR でラップされていない場合、AR Foundation を使用できます。例えば AR Foundation は ARFaceManager によって ARKit face tracking をサポートしますが、EasyAR はこの機能をラップしていません。

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

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

AR Foundation を使用する場合、EasyAR の機能効果は最適ではありません。次の 2 つの場合があります:

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

AR Foundation の ARCameraManager.currentConfiguration を変更することで、より良い入力データを取得できます。ARCoreARFoundationFrameSource.OptimizeConfigurationForTracking を有効にすると、最適な ARCameraManager.currentConfiguration の選択を自動で完了できます。ただし、一部のスマートフォン自体(例えば Mi 10)には問題があり、設定変更後に画像を取得できず、EasyAR が使用できなくなる場合があります(アプリには画像背景があるが EasyAR 機能が反応しない)。そのため通常は有効化を推奨しません。使用する必要がある場合は、EasyAR が使用できないときの fallback を用意してください。

ヘッドセットサポート

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 はサポートされません。