XREAL Air 2 Ultra × Unity 6でImage Trackingを実装する(SDK 3.1.0)
はじめに
XREAL Air 2 Ultra と Beam Pro を組み合わせ、特定の画像(マーカー)を検知してコンテンツを追従表示させる「Image Tracking」を実装しました。
今回は Unity 6 と XREAL SDK 3.1.0 を使用した、最新環境での実装手順をまとめます。
動作確認環境
- Unity: 6000.0.70f1
- XREAL SDK: 3.1.0
- AR Foundation: 6.0.6
- XR Interaction Toolkit: 3.0.1
- Device: XREAL Air 2 Ultra + Beam Pro
1. 事前準備:画像ライブラリの作成
Assets内にReference Image Library(XR Reference Image Library)を追加し、トラッキング対象とする画像を登録します。
| 設定項目 | 内容・注意点 |
|---|---|
| Name | どの参照画像が検出されたかを識別するための名前です。スクリプトから特定の画像を判別する際に使用します。 |
| Specify Size | 後で実際に印刷する画像の正確な物理サイズを入力してください。実際のサイズと入力値の誤差は 1cm以内 に収める必要があります。正確なサイズ指定は、正しい位置・角度(Pose Estimation)の計算と、オブジェクトをピタッと配置するために不可欠です。 |
| Keep Texture at Runtime | 必ず True(チェックを入れる)に設定してください。 これを有効にすることで、XREAL SDK サービスにテクスチャデータが渡され、トラッキングが可能になります。 |
設定の詳細は公式SDK:Image Trackingを参照してください
2. シーン構成とスクリプト実装
シーンのセットアップ
-
XR OriginオブジェクトにAR Tracked Image Managerを追加し、作成したライブラリをセットします -
AR Sessionを追加 - 以下の
ImageTrackingActionスクリプトをXR Originにアタッチします -
TrackedImageManagerにXR Originをセットし、Display Panelに追従させたいObjectをセット
スクリプト:ImageTrackingAction.cs
AR Foundation の trackedImagesChanged イベントを利用して、検知状態(Added / Updated / Removed)に応じた処理を行います。
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class ImageTrackingAction : MonoBehaviour
{
[SerializeField] ARTrackedImageManager _trackedImageManager;
[SerializeField] GameObject _displayPanel;
void OnEnable() => _trackedImageManager.trackedImagesChanged += OnChanged;
void OnDisable() => _trackedImageManager.trackedImagesChanged -= OnChanged;
void OnChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
foreach (var newImage in eventArgs.added)
{
_displayPanel.SetActive(true);
_displayPanel.transform.position = newImage.transform.position;
_displayPanel.transform.rotation = newImage.transform.rotation;
}
foreach (var updatedImage in eventArgs.updated)
{
if (updatedImage.trackingState == TrackingState.Tracking)
{
_displayPanel.transform.position = updatedImage.transform.position;
_displayPanel.transform.rotation = updatedImage.transform.rotation;
}
}
foreach (var removedImage in eventArgs.removed)
{
_displayPanel.SetActive(false);
}
}
}
3. ビルドとデプロイ(Beam Pro)
-
Build Settings: Platform を Android に変更し、
Build and Runを実行します - 接続: Beam Pro を PC に接続してインストールします
- 起動: インストール後、PC から Beam Pro を抜き、XREAL Air 2 Ultra を接続します
- アプリ起動: Beam Pro 内の MyGlasses アプリから作成したアプリを起動し、権限を許可します
4. 実際に動かしてみた感想
まずは、実際に動作している様子をご覧ください。
爆速の検知レスポンス
視野に対象の画像を入れた瞬間の反応が非常に良く、ストレスなく画像検知が始まります。
角度に強いトラッキング
画像に対して真っ直ぐ向き合う必要はなく、机の上に置いた状態などの「斜めの角度」からでも問題なく検知・追従してくれます。
追従の限界
ゆっくりとした動きには正確に追従しますが、画像を素早く動かしすぎると追従が少し遅れる傾向があります。実用上は、静止している、あるいはゆっくり動く対象にコンテンツを出す用途が最適だと感じました。
応用
複数の画像を検知して扱いたい場合は、以下の参考記事を参考にしてください。
