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 を使用する複合現実テンプレートが含まれており、すぐに開始できます。Android XR 向けに Unity でアプリをビルドする場合は、レンダリング パイプラインとしてユニバーサル レンダリング パイプライン(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 パッケージは、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 の機能文字列

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

AR セッション

Android XR: AR セッション

  • 機能設定に [バッファ破棄を最適化](Vulkan)が含まれる

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

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

いずれかのパッケージの機能を使用するには、そのパッケージの 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 顔

  • XR_ANDROID_eye_tracking のみ
  • 顔追跡なし

Android XR: 顔トラッキング

  • XR_ANDROID_face_tracking

アバターの目のサポートは、Android XR: AR Face 機能を通じて提供されます。Android XR: 顔トラッキング機能を使用して、ユーザーの表情にアクセスします。これら 2 つの機能は組み合わせて使用できます。

レイキャスト

Android XR: AR レイキャスト

  • Plane Anchor
  • Depth Anchor

なし

この機能を使用すると、光線をキャストして、その光線と、物理環境で検出された平面トラッカブルまたは深度トラッカブルとの交点を計算できます。

アンカー

Android XR: AR アンカー

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

  • 機能設定には永続性が含まれます。

どちらの機能も空間アンカーと平面アンカーをサポートしています。どちらか一方の機能を使用してください。永続アンカーの場合は、Android XR(拡張機能): Anchor を使用します。今後、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(Legacy)機能は、組み込みのレンダリング パイプラインと OpenGL ES もサポートしています。可能な場合は、Unity の視線追跡レンダリング機能を使用することをおすすめします。Android XR 向けにビルドする場合は、URP と Vulkan の両方を使用することをおすすめします。

Unbounded Reference Space

なし

Android XR: 無制限の参照空間

この機能は、XRInputSubsystem のトラッキング原点モードを Unbounded に設定します。Unbounded は、XRInputSubsystem がワールド アンカーに関連するすべての InputDevice を追跡することを示します。ワールド アンカーは変更される可能性があります。

環境ブレンドモード

なし

Environment Blend Mode

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

入力と操作

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

ハンド トラッキングとアイトラッキングに加えて、6DoF コントローラ、マウス、物理キーボードなどの周辺機器もサポートされています。つまり、Android XR 向けアプリはハンド インタラクションをサポートすることが想定されており、すべてのデバイスにコントローラが付属しているとは限りません。

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

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

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

手の操作

ハンド インタラクション(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_trackingXR_FB_hand_tracking_aim を使用してハンド トラッキング データにアクセスできます。また、ハンド トラッキングから入力ポーズにハンド ジョイント データを変換するラッパーも提供されます。XR Hands パッケージで提供される機能を使用するには、ハンド トラッキング サブシステムMeta ハンド トラッキング エイム OpenXR の機能を有効にします。

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

XR hands パッケージは、より詳細な手のポーズや手関節のデータが必要な場合や、カスタム ジェスチャーを使用する必要がある場合に便利です。

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

顔追跡の信頼度領域

XR_ANDROID_face_tracking 拡張機能は、顔の 3 つの領域(左上、右上、下部)の信頼値を提供します。これらの値は 0(信頼度なし)から 1(信頼度最大)の範囲で、各リージョンの顔トラッキングの精度を示します。

これらの信頼値を使用して、ブレンドシェイプを段階的に無効にしたり、対応する顔領域に視覚フィルタ(ぼかしなど)を適用したりできます。対応する顔の領域のブレンドシェイプを無効にします。

「下顔面」領域は、目から下のすべて(口、顎、頬、鼻など)を表します。上部の 2 つの領域には、顔の左右の目と眉毛の領域が含まれます。

次の C# コード スニペットは、Unity スクリプトで信頼度データにアクセスして使用する方法を示しています。

using UnityEngine;
using Google.XR.Extensions;

public class FaceTrackingConfidence : MonoBehaviour
{
    void Update()
    {
      if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
      {
        DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
        return;
      }
      else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
      {
        DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
        return;
      }

      for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
      {
        switch (x)
        {
          case (int)XRFaceConfidenceRegion.Lower:
            regionText = "Bottom";
            break;
          case (int)XRFaceConfidenceRegion.LeftUpper:
            regionText = DebugTextConfidenceLeft;
            break;
          case (int)XRFaceConfidenceRegion.RightUpper:
            regionText = DebugTextConfidenceRight;
            break;
        }
    }
}

詳細については、Unity 向け Android XR 拡張機能のドキュメントをご覧ください。

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

Android XR は、手のレンダリングに 2 つの方法(ハンドメッシュとプレハブ ビジュアライザー)をサポートしています。

手のメッシュ

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

XR Hands プレハブ

XR Hands パッケージには、Hands visualizer というサンプルが含まれています。このサンプルには、ユーザーの手をコンテキストに適した形でレンダリングするための、完全にリグされた左右の手が含まれています。

システム ジェスチャー

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

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

XR Interaction Toolkit

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


OpenXR™ および OpenXR のロゴは、Khronos Group Inc. が所有する商標であり、中国、欧州連合、日本、英国で商標として登録されています。