Unity AR のモーション追跡の中心 —— XR Origin
XR Origin は Unity におけるモーション追跡機能の中核概念です。現代の AR アプリケーションでは、モーション追跡は不可欠な機能となりつつあります。モーション追跡により、アプリは他の認識物を必要とせずにユーザーの現実世界での位置と向きを把握し、没入型の AR 体験を実現します。以下では、XR Origin の基本概念、構成、ライフサイクル、および XR Origin が必要となる状況について説明します。
開始前に
- ARSession の概要 を通じて session の基本概念、構成、およびワークフローを理解してください。
XR Originとは
モーション追跡機能が初期化されるとき、追跡の原点として参照点が選択されます。この参照点は通常、ユーザーがアプリを起動したとき、またはシステム AR サービスが開始されたときのデバイスの位置です。この参照点を Unity シーン内で表現したものが XR Origin です。ほとんどの場合、XR Origin のシーン内での開始位置はカメラのデフォルト開始位置でもあります。
この動画は、モーション追跡のみが動作しているシンプルな AR シーンを示しています。左側は
Hierarchyビュー、中央はSceneビュー、右側はGameビューです。動画はシミュレーションデータを使用し、Unity エディタのPlayモードで録画されています。Gameビューの内容は、ユーザーが現実世界でスマートフォンを通じて見る内容と同じです。この動画では、XR Origin(青色の球体)はシーン内で固定されていますが、ユーザーを表すカメラ(カメラアイコン)はユーザーの現実世界での移動に応じて動きます。白色の錐体は過去の一定期間におけるカメラの位置と向きの軌跡を示しており、カメラのシーン内での動きを理解しやすくしています。これらの白色錐体は XR Origin のノード下に生成されており、これがこの種のシーンにおけるオブジェクトの典型的な階層構造です。
Unity のモーション追跡システムでは、カメラは通常 XR Origin に追従して動きます。カメラが必ずしも XR Origin の子ノードである必要はありませんが、AR Session は XR Origin の位置に基づいてカメラの位置を計算し、ユーザーが見る内容と現実世界の内容が一致するようにします。
この動画は同じシーンを示していますが、今回は実行中に XR Origin(青色の球体)を移動させています。XR Origin が移動されると、カメラは XR Origin に追従して動き、
Gameビューの内容は変化していないことがわかります。
実際の AR シーンでは、この運動関係はさらに複雑になります。
異なる中心モードにおける XR Origin の動作
Unity では、すべての AR 追跡の中心参照点は session 中心と呼ばれ、session の実行中にこの中心を決定するルールは中心モードと呼ばれます。異なる中心モードでは、XR Origin の動作が異なります:
SessionOrigin 中心モードでは、XR Origin は自由に移動できます。
通常、SessionOrigin モードはモーション追跡のみが動作しているシーンで使用されます。他の機能と同時に実行される場合、通常は SessionOrigin モードは使用されません。
ただし、ヘッドセットを使用する場合、ベンダーが Unity でモーション追跡の参照点を正しく実装していない場合、Unity のワールド中心を使用する必要があり、これにより SessionOrigin モードの使用が強制されます。この状況では、コンテンツのルートノードが AR 機能に追従して動く必要があり、コンテンツの見た目に影響を与える可能性がありますが、サードパーティベンダーが変更を行うまでは他に方法がありません。
その他の中心モード(例: FirstTarget)では、XR Origin は自由に移動できません。
通常、FirstTarget モードは、非モーション追跡、または他の AR 機能がモーション追跡と同時に実行されるシーンで使用されます。
このモードでは、XR Origin の位置は AR 機能によって決定されるため、XR Origin を自由に移動することはできません。
中心モードおよびシーン内オブジェクトの移動方法については、詳細を 中心モード で参照してください。
XR Origin の形態と構成
EasyAR は2種類の異なる形式の XR Origin を使用できます:
- EasyAR が提供する XR Origin
- Unity XR フレームワークが提供する XR Origin
XR Origin (EasyAR)
典型的な XR Origin の構造は以下の通りです:

XR Origin ルートノードは空の GameObject であり、1つ以上の XR Origin Child 子ノードを持つことができます。XR Origin Child には XROriginChildController コンポーネントが含まれており、XR Origin の制御ロジックを代理します。
session 実行時、シーンに正しい XR Origin 構造がない場合、XR Origin および1つの XR Origin Child が自動的に作成されます。実行中、XR Origin Child は XR Origin と同じ位置および向きに制約されます。
session によって生成されるオブジェクト、例えば疎空間マップの点群や密空間マップのメッシュは、XR Origin Child ノード下に作成されます。
この動画は、同じシーンでモーション追跡と同時に密空間マッピングが動作している効果を示しています。生成されたメッシュが XR Origin Child ノード下に作成されていることがわかります。
注:理解を容易にするため、動画では深度マップ生成を無効にしています。そのため、動画の
Sceneビューの内容は実際の実行時の表示内容と異なります。Gameビューの表示効果はメッシュの透明度をオフにした場合と同じです。
[オプション] XR Origin (Unity XR)
必要に応じて、Unity XR フレームワークが提供する XR Origin コンポーネントを使用できます。
Unity XR フレームワークが提供する XR Origin を使用する場合、典型的な構造は以下の通りです:

ヘッドセットシーンでは、典型的な構造は以下の通りです:

XR Origin ルートノードは Unity XR フレームワークによって作成および管理される GameObject であり、1つ以上の XR Origin Child 子ノードを持つことができます。XR Origin Child には XROriginChildController コンポーネントが含まれており、XR Origin の制御ロジックを代理します。
session 実行時、シーンに正しい XR Origin Child 構造がない場合、XR Origin Child が自動的に作成されます。実行中、XR Origin Child は XR Origin と同じ位置および向きに制約されます。
Unity XR フレームワークが提供する XR Origin は、主に以下の2つの状況でサポートを提供します:
- プロジェクトですでに AR Foundation を使用しており、EasyAR と同時に動作させるか、デバイスのサポート状況に基づいて両者を切り替えたい場合。
- 使用しているヘッドセット SDK が Unity XR フレームワーク提供の XR Origin コンポーネントを使用している場合。
注記
Unity XR のコアパッケージ com.unity.xr.core-utils がプロジェクトにインポートされていない場合、シーン内のカメラが Unity XR フレームワーク提供の XR Origin と同じ階層構造(Camera および Camera Offset という名前の親ノード)にあるとき、session はこの構造が Unity XR フレームワークによって作成されたものとみなして使用します。これは、シーンに最大限の互換性を提供するためです。つまり、AR Foundation を使用して作成されたシーンは、AR Foundation がプロジェクトにインポートされていなくても動作し(AR Foundation は機能しませんが)、残りの AR 機能は正常に動作し続けます。AR Foundation のみが提供する機能を除けば、これは AR アプリケーションの機能性およびデバイス互換性に影響を与えません。
ほとんどの EasyAR のサンプルシーンは、AR Foundation が存在しない場合でも実行可能であり、AR Foundation が存在する場合には AR Foundation との連携能力を示すためにこの方法を使用しています。
AR Foundation の定義では、その XR Origin は XR シーンにおける追跡空間の中心です。ただし注意すべき点は、AR Foundation の概念ではモーション追跡が必須機能として扱われており、それが説明する XR シーン内の追跡とはモーション追跡を指します。
EasyAR システムでは、モーション追跡はオプション機能であるため、XR Origin もオプションです。XR Origin はモーション追跡機能が有効な場合にのみ作成および使用されます。
XR Origin のライフサイクル
XR Origin のライフサイクルは session に依存します。session が開始されると、XR Origin が選択されるか、シーンに正しい XR Origin 構造がない場合に作成されます。session が停止すると、XR Origin は次の session で使用されるか手動で削除されるまでその場に残ります。
次のステップ
作成
- シーン内で XR Origin を作成 してみる
実行制御
- XR Origin の Active 制御戦略 を理解する