このガイドでは、Android XR 用 Unity での開発の概要について説明します。Android XR は、Unity でおなじみのツールや機能と連携して動作します。また、Unity の Android XR サポートは OpenXR をベースに構築されているため、OpenXR の概要で説明されている機能の多くは Unity でもサポートされています。
このガイドでは、次のことについて説明します。
- Android XR 向けの Unity サポート
- Unity XR の基本
- Android XR 向けアプリの開発と公開
- Android XR 用 Unity パッケージ
- Unity OpenXR: Android XR パッケージ
- Unity 用 Android XR 拡張機能
- 機能と互換性に関する考慮事項
- 入力と操作
Android XR 向け Unity サポート
Android XR 用の Unity アプリをビルドする際は、Unity 6 の最新バージョンの複合現実ツールと機能を利用できます。これには、XR Interaction Toolkit、AR Foundation、OpenXR Plugin を使用する複合現実テンプレートが含まれており、すぐに開始できます。Android XR 向けに Unity でアプリをビルドする場合は、レンダリング パイプラインとしてユニバーサル レンダリング パイプライン(URP)、グラフィック API として Vulkan を使用することをおすすめします。これらの機能を使用すると、Vulkan でのみサポートされている Unity のグラフィック機能の一部を活用できます。これらの設定を構成する方法について詳しくは、プロジェクト設定ガイドをご覧ください。
Unity XR の基本
Unity や XR 開発を初めて行う場合は、Unity の XR マニュアルを参照して、基本的な XR のコンセプトとワークフローを理解してください。XR マニュアルには、次の情報が記載されています。
- Unity OpenXR: Android XR や Unity 用 Android XR 拡張機能などの XR プロバイダ プラグイン
- XR サポート パッケージ: アプリケーション レベルの追加機能を追加します。
- Unity XR テクノロジ スタックと XR サブシステムについて説明する XR アーキテクチャ ガイド
- XR プロジェクトのセットアップ
- XR アプリをビルドして実行する
- Universal Render Pipeline、ステレオ レンダリング、フォービエイテッド レンダリング、マルチビュー レンダリング領域、VR フレーム タイミングなどの XR グラフィック ガイダンス
- XR 音声ガイダンス(音声スペーシャライザーのサポートを含む)
Android 向けアプリを開発して公開する
Unity は、Android 向けの開発、ビルド、公開に関する詳細なドキュメントを提供しています。このドキュメントでは、Unity の Android 権限、Android ビルド設定、Android 向けアプリのビルド、Google Play への配信などのトピックを取り上げています。
Android XR 用 Unity パッケージ
Android XR 用の Unity アプリのビルドをサポートするパッケージは 2 つあります。これらのパッケージはどちらも XR プロバイダ プラグインであり、Unity の XR プラグイン管理パッケージで有効にできます。XR プラグイン マネージャーは、XR プラグインの読み込み、初期化、設定、ビルドのサポートを管理し、ヘルプを提供するためのプロジェクト設定を追加します。アプリが実行時に OpenXR 機能を実行できるようにするには、プロジェクトでプラグイン マネージャーを通じてこれらの機能を有効にする必要があります。
この画像は、Unity のエディタでこれらのフィーチャー グループを有効にする場所の例を示しています。
Unity OpenXR Android XR
Unity OpenXR Android XR パッケージは、Unity に Android XR サポートを追加するための XR プラグインです。この XR プラグインは、Unity の Android XR サポートの大部分を提供し、AR Foundation プロジェクトの Android XR デバイス サポートを有効にします。AR Foundation は、AR または複合現実エクスペリエンスを作成したいデベロッパー向けに設計されています。AR 機能のインターフェースを提供しますが、機能自体は実装しません。Unity OpenXR Android XR パッケージが実装を提供します。このパッケージの使用を開始するには、パッケージ マニュアルをご覧ください。このマニュアルにはスタートガイドが含まれています。
Unity 用 Android XR 拡張機能
Unity 用 Android XR 拡張機能は、Unity OpenXR Android XR パッケージを補完するもので、没入感のあるエクスペリエンスの構築に役立つ追加機能が含まれています。単独で使用することも、Unity OpenXR Android XR パッケージと組み合わせて使用することもできます。
このパッケージの使用を開始するには、プロジェクトのセットアップ ガイドまたは Unity 用 Android XR 拡張機能をインポートするためのクイックスタートに沿って操作してください。
機能と互換性に関する考慮事項
次の表は、Unity OpenXR: Android XR パッケージと Android XR Extensions for Unity パッケージでサポートされている機能を示しています。この表を使用して、必要な機能が含まれているパッケージと、互換性に関する考慮事項を確認できます。
機能 |
Unity OpenXR: Android XR 機能文字列 |
Android XR Extensions for Unity の機能文字列 |
ユースケースと想定される動作 |
---|---|---|---|
Android XR: AR セッション
|
Android XR(拡張機能): セッション管理
|
いずれかのパッケージの機能を使用するには、そのパッケージの AR セッション機能を有効にする必要があります。両方の機能セットを同時に有効にできます。個々の機能は、競合を適切に処理します。 |
|
なし |
なし |
デバイス トラッキングは、物理空間におけるデバイスの位置と回転を追跡するために使用されます。XR Origin GameObject は、XROrigin コンポーネントと、カメラと TrackedPoseDriver を含む GameObject 階層を使用して、デバイスのトラッキングと、トラッキング可能なオブジェクトを Unity の座標系に変換する処理を自動的に行います。 |
|
Android XR: AR カメラ |
なし |
この機能は、光の推定と全画面パススルーをサポートします。 |
|
Android XR: AR プレーン |
Android XR(拡張機能): 平面 |
これら 2 つの機能は同じです。どちらか一方を使用してください。Android XR(拡張機能): Unity OpenXR Android XR パッケージに依存しなくても、デベロッパーが Android XR(拡張機能): オブジェクト トラッキングと永続アンカーの機能を使用できるように、Plane が含まれています。今後、Android XR(拡張機能): 平面は、Android XR: AR アンカーに置き換えられます。 |
|
なし |
Android XR(拡張機能): オブジェクト トラッキング |
この機能は、参照オブジェクト ライブラリと組み合わせて使用され、物理環境内のオブジェクトの検出と追跡をサポートします。 |
|
Android XR: AR Face
|
Android XR: 顔トラッキング
|
アバターの目のサポートは、Android XR: AR Face 機能を通じて提供されます。Android XR: 顔トラッキング機能を使用して、ユーザーの表情にアクセスします。これら 2 つの機能は組み合わせて使用できます。 |
|
Android XR: AR レイキャスト
|
なし |
この機能を使用すると、光線をキャストして、その光線と、物理環境で検出された平面トラッカブルまたは深度トラッカブルとの交点を計算できます。 |
|
Android XR: AR アンカー |
Android XR(拡張機能): アンカー
|
どちらの機能も空間アンカーと平面アンカーをサポートしています。どちらか一方の機能を使用してください。永続アンカーの場合は、Android XR(拡張機能): Anchor を使用します。今後、Android XR(拡張機能): アンカーは削除され、すべてのアンカー機能が Android XR: AR アンカーに統合されます。 |
|
Android XR: AR オクルージョン
|
なし |
オクルージョンを使用すると、アプリ内の複合現実コンテンツを、物理環境内のオブジェクトの背後に隠したり、部分的に隠したりすることができます。 |
|
パフォーマンス指標 |
Android XR のパフォーマンス指標 |
なし |
この機能を使用すると、Android XR デバイスのパフォーマンス指標にアクセスできます。 |
コンポジション レイヤのサポート(OpenXR プラグインと XR コンポジション レイヤが必要) |
Android XR: パススルー合成レイヤ
|
Unity のコンポジション レイヤ サポートを使用して、基本的なコンポジション レイヤ(四角形、円柱、投影など)を作成します。Android XR: パススルー コンポジション レイヤーを使用して、Unity の GameObject から読み取ったカスタム メッシュでパススルー レイヤーを作成できます。 |
|
視線追跡レンダリング(OpenXR プラグインが必要)
|
フォービエーション(従来版) |
視線追跡レンダリングでは、ユーザーの周辺視野の領域の解像度を下げることで、レンダリングを高速化できます。Unity のフォービエイテッド レンダリング機能は、URP と Vulkan を使用するアプリでのみサポートされています。Unity 向け Android XR 拡張機能の Foveation(Legacy)機能は、組み込みのレンダリング パイプラインと OpenGL ES もサポートしています。可能な場合は、Unity の視線追跡レンダリング機能を使用することをおすすめします。Android XR 向けにビルドする場合は、URP と Vulkan の両方を使用することをおすすめします。 |
|
なし |
Android XR: 無制限のリファレンス空間 |
この機能は、XRInputSubsystem のトラッキング原点モードを Unbounded に設定します。Unbounded は、XRInputSubsystem がワールド アンカーに関連するすべての InputDevice を追跡することを示します。ワールド アンカーは変更される可能性があります。 |
|
なし |
Environment Blend Mode |
この機能を使用すると、XR 環境ブレンド モードを設定できます。このモードは、パススルーが有効になっている場合に、仮想画像が現実世界の環境とどのようにブレンドされるかを制御します。 |
入力と操作
Android XR は、マルチモーダルな自然入力をサポートしています。
ハンド トラッキングとアイトラッキングに加えて、6DoF コントローラ、マウス、物理キーボードなどの周辺機器もサポートされています。つまり、Android XR 向けアプリはハンド インタラクションをサポートすることが想定されており、すべてのデバイスにコントローラが付属しているとは限りません。
インタラクション プロファイル
Unity は、インタラクション プロファイルを使用して、XR アプリケーションがさまざまな XR デバイスやプラットフォームと通信する方法を管理します。これらのプロファイルは、さまざまなハードウェア構成の想定される入力と出力を確立し、さまざまなプラットフォーム間で互換性と一貫した機能を促進します。インタラクション プロファイルを有効にすると、XR アプリケーションがさまざまなデバイスで正しく機能し、入力マッピングの一貫性が維持され、特定の XR 機能にアクセスできるようになります。インタラクション プロファイルを設定するには:
- [プロジェクト設定] ウィンドウを開きます(メニュー: [編集] > [プロジェクト設定])。
- [XR Plug-in Management] をクリックして、プラグイン セクションを開きます(必要に応じて)。
- XR プラグインのリストで [OpenXR] を選択します。
- [Interaction Profiles] セクションで、[+] ボタンを選択してプロファイルを追加します。
- リストから追加するプロファイルを選択します。
手の操作
ハンド インタラクション(XR_EXT_hand_interaction
)は OpenXR プラグインによって提供されます。ハンド インタラクション プロファイルを有効にすると、Unity 入力システムで <HandInteraction>
デバイス レイアウトを公開できます。このインタラクション プロファイルは、OpenXR で定義された 4 つのアクション ポーズ(「ピンチ」、「ポーク」、「エイム」、「グリップ」)でサポートされる手入力に使用します。ハンド インタラクションやハンド トラッキングの機能を追加する必要がある場合は、このページの XR Hands を参照してください。
視線操作
視線操作(XR_EXT_eye_gaze_interaction
)は OpenXR プラグインによって提供されます。このレイアウトを使用すると、拡張機能が返す視線ポーズデータ(位置と回転)を取得できます。OpenXR 入力ガイドで視線入力について詳しく読む。
コントローラの操作
Android XR は、6DoF コントローラ用の Oculus Touch Controller Profile をサポートしています。これらのプロファイルはどちらも OpenXR プラグインによって提供されます。
マウス操作
Android XR マウス インタラクション プロファイル(XR_ANDROID_mouse_interaction
)は、Unity 用 Android XR 拡張機能によって提供されます。Unity Input System で <AndroidXRMouse>
デバイス レイアウトを公開します。
手のひらのポーズのインタラクション
OpenXR プラグインは、手のひらポーズの操作(XR_EXT_palm_pose
)をサポートします。これにより、Unity Input System 内で <PalmPose>
レイアウトが公開されます。手のひらポーズは、より複雑なユースケースでハンド トラッキングを行う拡張機能やパッケージの代替となるものではありません。アバターのビジュアルなどのアプリ固有のビジュアル コンテンツを配置するために使用できます。手のひらのポーズは、手のひらの位置と向きの両方で構成されます。
XR Hands
XR Hands パッケージを使用すると、XR_EXT_hand_tracking
と XR_FB_hand_tracking_aim
を使用してハンド トラッキング データにアクセスできます。また、ハンド トラッキングから入力ポーズにハンド ジョイント データを変換するラッパーも提供されます。XR Hands パッケージで提供される機能を使用するには、ハンド トラッキング サブシステム機能と Meta ハンド トラッキング エイム OpenXR 機能を有効にします。
XR hands パッケージは、より詳細な手のポーズや手の関節のデータが必要な場合や、カスタム ジェスチャーを操作する必要がある場合に便利です。
詳しくは、Unity のプロジェクトで XR Hands を設定するためのドキュメントをご覧ください。
手のレンダリング方法を選択する
Android XR は、手のレンダリングに 2 つの方法(ハンドメッシュとプレハブ ビジュアライザー)をサポートしています。
手のメッシュ
Android XR Unity パッケージには、XR_ANDROID_hand_mesh extension
へのアクセスを提供するハンドメッシュ機能が含まれています。ハンド メッシュ機能は、ユーザーの手のメッシュを提供します。ハンドメッシュには、手の形状を表す三角形の頂点が含まれています。この機能は、ユーザーの手の実際の形状を表すパーソナライズされたメッシュを可視化するために使用することを目的としています。
XR Hands プレハブ
XR Hands パッケージには、Hands visualizer というサンプルが含まれています。このサンプルには、ユーザーの手をコンテキストに適した表現でレンダリングするための、完全にリグされた左右の手が含まれています。
システム ジェスチャー
Android XR には、ユーザーが戻る、ランチャーを開く、実行中のアプリの概要を表示するためのメニューを開くシステム ジェスチャーが含まれています。ユーザーは、利き手でピンチ操作を行うことで、このシステム メニューを有効にできます。
ユーザーがシステム ナビゲーション メニューを操作している場合、アプリはヘッド トラッキング イベントにのみ応答します。XR Hands パッケージは、ユーザーがこのシステム ナビゲーション メニューの操作などの特定のアクションを実行したことを検出できます。AimFlags
、SystemGesture
、DominantHand
を確認すると、このシステム アクションがいつ実行されたかを確認できます。AimFlags
の詳細については、Unity の Enum MetaAimFlags ドキュメントをご覧ください。
XR Interaction Toolkit
XR Interaction Toolkit パッケージは、VR と AR のエクスペリエンスを作成するための高レベルのコンポーネント ベースのインタラクション システムです。Unity の入力イベントから 3D と UI のインタラクションを利用できるようにするフレームワークを提供します。触覚フィードバック、視覚フィードバック、移動などのインタラクション タスクをサポートします。
OpenXR™ および OpenXR のロゴは、Khronos Group Inc. が所有する商標であり、中国、欧州連合、日本、英国で商標として登録されています。