Android XR 向けに Unity で開発する

このガイドでは、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 ToolkitAR FoundationOpenXR Plugin を使用する複合現実テンプレートが含まれており、すぐに始めることができます。Unity for Android XR でアプリをビルドする場合は、レンダリング パイプラインとしてユニバーサル レンダリング パイプライン(URP)を使用し、グラフィック API として Vulkan を使用することをおすすめします。これらの機能を使用すると、Vulkan でのみサポートされている Unity の新しいグラフィック機能の一部を利用できます。これらの設定方法について詳しくは、プロジェクト設定ガイドをご覧ください。

Unity XR の基本

Unity または XR 開発を初めて行う場合は、Unity の XR マニュアルで 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 XR プラグイン管理画面の例

Unity OpenXR Android XR

Unity OpenXR Android XR パッケージは、Android XR のサポートを Unity に追加する XR プラグインです。この XR プラグインは、Unity の Android XR サポートの大部分を提供し、AR Foundation プロジェクトで Android XR デバイスをサポートします。AR Foundation は、AR や複合現実のエクスペリエンスを作成するデベロッパー向けに設計されています。AR 機能のインターフェースを提供しますが、機能自体は実装しません。Unity OpenXR Android XR パッケージには、この実装が用意されています。このパッケージの使用を開始するには、パッケージ マニュアルをご覧ください。このマニュアルには、スタートガイドが含まれています。

Unity 向け Android XR 拡張機能

Android XR Extensions for Unity は、Unity OpenXR Android XR パッケージを補完するもので、没入型エクスペリエンスの構築に役立つ追加機能が含まれています。単独で使用することも、Unity OpenXR Android XR パッケージと組み合わせて使用することもできます。

このパッケージの使用を開始するには、プロジェクト設定ガイドまたは Unity 用 Android XR Extensions のインポートに関するクイックスタートをご覧ください。

機能と互換性に関する考慮事項

次の表に、Unity OpenXR: Android XR パッケージと Unity 用 Android XR Extensions パッケージでサポートされている機能を示します。この表は、必要な機能が含まれているパッケージと互換性に関する考慮事項を判断するために使用できます。

機能

Unity OpenXR: Android XR の機能文字列

Unity 向け Android XR Extensions の機能文字列

ユースケースと想定される動作

AR セッション

Android XR: AR セッション

  • 機能設定には、バッファ破棄の最適化(Vulkan)が含まれます。

Android XR(拡張機能): セッション管理

  • 機能設定には、サブサンプリング(Vulkan)と URP SpaceWarp(Vulkan)が含まれます。

いずれかのパッケージの機能を使用するには、そのパッケージの AR セッション機能を有効にする必要があります。両方の特徴セットを同時に有効にできます。個々の特徴は、競合に応じて処理します。

デバイスの追跡

なし

なし

デバイスの追跡は、物理空間におけるデバイスの位置と回転を追跡するために使用されます。XR オリジン GameObject は、XROrigin コンポーネントと、カメラと TrackedPoseDriver を含む GameObject 階層を介して、デバイス トラッキングとトラッケーブルの Unity の座標系への変換を自動的に処理します。

カメラ

Android XR: AR カメラ

なし

この機能は、光の推定と全画面パススルーをサポートしています。

飛行機の検出

Android XR: AR プレーン

Android XR(拡張機能): プレーン

これら 2 つの機能は同じです。どちらか一方を使用してください。Android XR(拡張機能): プレーンが含まれているため、デベロッパーは Unity OpenXR Android XR パッケージに依存することなく、Android XR(拡張機能): オブジェクト トラッキングと永続アンカーの機能を使用できます。今後、Android XR(拡張機能): プレーンは削除され、Android XR: AR アンカーに置き換えられます。

オブジェクト トラッキング

なし

Android XR(拡張機能): オブジェクト トラッキング

この機能は、物理環境内のオブジェクトの検出と追跡をサポートし、参照オブジェクト ライブラリと組み合わせて使用します。

顔トラッキング

Android XR: AR フェイス

  • XR_ANDROID_avatar_eyes のみ
  • 顔追跡なし

Android XR: 顔トラッキング

  • XR_ANDROID_face_tracking

アバターの目のサポートは、Android XR: AR Face 機能によって提供されます。Android XR: 顔トラッキング機能を使用して、ユーザーの表情にアクセスします。必要に応じて、これらの 2 つの機能を併用することもできます。

レイキャスト

Android XR: AR レイキャスト

  • プレーン アンカー
  • デプス アンカー

なし

この機能を使用すると、レイをキャストし、そのレイと物理環境で検出されたプレーン トラッケーブルまたはデプス トラッケーブルとの交差を計算できます。

アンカー

Android XR: AR アンカー

Android XR(拡張機能): アンカー

  • 機能の設定には永続性があります。

どちらの機能にも空間アンカーと平面アンカーのサポートが含まれています。どちらか一方の機能を使用してください。永続アンカーの場合は、Android XR(拡張機能): アンカーを使用します。今後、Android XR(拡張機能): アンカーは削除され、アンカーのすべての機能は Android XR: AR アンカーに統合されます。

オクルージョン

Android XR: AR オクルージョン

  • 環境の深さ

なし

オクルージョンを使用すると、アプリの混合現実コンテンツを、物理的な環境内のオブジェクトの背後に隠したり、部分的に隠したりできます。

パフォーマンス指標

Android XR のパフォーマンス指標

なし

この機能を使用すると、Android XR デバイスのパフォーマンス指標にアクセスできます。

合成レイヤ

コンポジション レイヤのサポート(OpenXR プラグインと XR コンポジション レイヤが必要です)

Android XR: パススルー コンポジション レイヤ

  • XR_ANDROID_composition_layer_passthrough_mesh

Unity の合成レイヤ サポートを使用して、基本的な合成レイヤ(四角形、円柱、投影など)を作成します。Android XR: パススルー コンポジション レイヤを使用すると、Unity の GameObject から読み取るカスタムメッシュでパススルー レイヤを作成できます。

フォーカス レンダリング

フォービエイテッド レンダリング(OpenXR プラグインが必要です)

  • アイトラッキングによるフォーカス レンダリングをサポート: 解像度の高い領域は、ユーザーが現在見ている場所の中央に配置されるため、ユーザーに気づかれにくくなります。

視線(従来版)

フォベア レンダリングでは、ユーザーの周辺視野内の領域の解像度を下げることで、レンダリングを高速化できます。Unity のフォーカス レンダリング機能は、URP と Vulkan を使用するアプリでのみサポートされています。Unity 向け Android XR 拡張機能の Foveation(従来版)機能は、BiRP と GLES もサポートしています。可能な限り、Unity のフォーカス レンダリング機能を使用することをおすすめします。Android XR 用にビルドする場合は、URP と Vulkan の両方を使用することをおすすめします。

無制限の参照空間

なし

Android XR: 無制限の参照空間

この機能は、XRInputSubsystem トラッキング起点モードを [無制限] に設定します。無制限は、XRInputSubsystem がワールド アンカー(変更される可能性がある)を基準にすべての InputDevice を追跡することを示します。

環境ブレンドモード

なし

環境ブレンドモード

この機能を使用すると、XR 環境のブレンドモードを設定できます。このモードは、パススルーが有効になっているときに、仮想画像を現実世界の環境とどのようにブレンドするかを制御します。

入力と操作

Android XR は、マルチモーダルの自然な入力をサポートしています。

手や目のトラッキングに加えて、6DoF コントローラ、マウス、物理キーボードなどの周辺機器もサポートされています。つまり、Android XR 向けのアプリは手による操作に対応することが期待されており、すべてのデバイスにコントローラが付属するとは限りません。

インタラクション プロファイル

Unity はインタラクション プロファイルを使用して、XR アプリケーションがさまざまな XR デバイスやプラットフォームと通信する方法を管理します。これらのプロファイルは、さまざまなハードウェア構成で想定される入力と出力を設定し、さまざまなプラットフォームで互換性と一貫した機能を確保します。インタラクション プロファイルを有効にすると、XR アプリケーションがさまざまなデバイスで正しく機能し、入力マッピングの一貫性を維持し、特定の XR 機能にアクセスできるようになります。インタラクション プロファイルを設定するには:

  1. [プロジェクトの設定] ウィンドウを開きます(メニュー: [編集] > [プロジェクトの設定])。
  2. [XR プラグイン管理] をクリックして、プラグイン セクションを開きます(必要に応じて)。
  3. XR プラグインのリストで [OpenXR] を選択します。
  4. [インタラクション プロファイル] セクションで、[+] ボタンを選択してプロファイルを追加します。
  5. リストから追加するプロファイルを選択します。

手の操作

ハンド操作(XR_EXT_hand_interaction)は OpenXR プラグインによって提供されます。ハンド操作プロファイルを有効にすると、 デバイス レイアウトを Unity 入力システムに公開できます。このインタラクション プロファイルは、OpenXR で定義された 4 つのアクション ポーズ(「ピンチ」、「突き刺す」、「照準」、「グリップ」)でサポートされているハンド入力に使用します。手の操作や手のトラッキング機能がさらに必要な場合は、このページのXR Hands をご覧ください。

アイトラッキングによる操作

アイトラッキング操作(XR_EXT_eye_gaze_interaction)は OpenXR プラグインによって提供されます。このレイアウトを使用すると、拡張機能が返すアイポーズ データ(位置と回転)を取得できます。アイトラッキングによる操作について詳しくは、OpenXR 入力ガイドをご覧ください

コントローラ操作

Android XR は、6DoF コントローラ用の Oculus Touch コントローラ プロファイルをサポートしています。これらのプロファイルはどちらも OpenXR プラグインによって提供されます。

マウス操作

Android XR マウス操作プロファイル(XR_ANDROID_mouse_interactionは、Android XR Extensions for Unity によって提供されます。Unity 入力システム<AndroidXRMouse> デバイス レイアウトを公開します。

手のひらのポーズによる操作

OpenXR プラグインは、手のひらポーズのインタラクションXR_EXT_palm_pose)をサポートしています。これにより、Unity 入力システム内に <PalmPose> レイアウトが公開されます。手のひらのポーズは、より複雑なユースケースでハンド トラッキングを実行する拡張機能やパッケージの代替手段ではありません。代わりに、アバター ビジュアルなどのアプリ固有のビジュアル コンテンツを配置するために使用できます。手のひらのポーズは、手のひらの位置と向きの両方で構成されます。

XR ハンド

XR Hands パッケージを使用すると、手トラッキング データ(XR_EXT_hand_trackingXR_FB_hand_tracking_aim)にアクセスできます。また、手関節データを手トラッキングから入力ポーズに変換するラッパーも提供されます。XR Hands パッケージで提供される機能を使用するには、ハンド トラッキング サブシステムMeta Hand Tracking Aim OpenXR 機能を有効にします。

ハンド トラッキングを有効にする方法を示す例

XR ハンド パッケージは、より詳細な手の姿勢や手のジョイント データが必要な場合や、カスタム ジェスチャーを操作する必要がある場合に便利です。

詳しくは、Unity のプロジェクトで XR ハンドを設定するドキュメントをご覧ください。

手をレンダリングする方法を選択する

Android XR は、手のメッシュとプレハブ ビジュアライザの 2 つの方法で手をレンダリングできます。

手のメッシュ

Android XR Unity パッケージには、XR_ANDROID_hand_mesh extension にアクセスできるハンドメッシュ機能が含まれています。ハンドメッシュ機能は、ユーザーの手のメッシュを提供します。手メッシュには、手のジオメトリを表す三角形の頂点が含まれています。この機能は、ユーザーの手の実際のジオメトリを表すパーソナライズされたメッシュを提供することによって、可視化を可能にすることを目的としています。

XR ハンド プレハブ

XR Hands パッケージには、Hands ビジュアライザーというサンプルが含まれています。このサンプルには、ユーザーの手の状況に応じた表現をレンダリングするための、完全にリグされた左手と右手が含まれています。

システム ジェスチャー

Android XR には、ユーザーがメニューを開いて戻る、ランチャーを開く、現在実行中のアプリの概要を取得するためのシステム ジェスチャーが含まれています。ユーザーは利き手でピンチ操作を行うと、このシステム メニューを有効にできます。

ユーザーがシステム ナビゲーション メニューを操作している場合、アプリケーションはヘッド トラッキング イベントにのみ応答します。XR Hands パッケージは、ユーザーがこのシステム ナビゲーション メニューを操作するなど、特定のアクションを実行したときに検出できます。AimFlags SystemGesture と DominantHand を確認すると、このシステム アクションが実行されたタイミングを把握できます。AimFlags の詳細については、Unity の Enum MetaAimFlags のドキュメントをご覧ください。

XR インタラクション ツールキット

XR インタラクション ツールキット パッケージは、VR と AR のエクスペリエンスを作成するための高レベルのコンポーネントベースのインタラクション システムです。Unity 入力イベントから 3D と UI のインタラクションを可能にするフレームワークを提供します。触覚フィードバック、視覚フィードバック、移動などのインタラクション タスクをサポートしています。