Android XR 向けに Unity で開発する

対応する XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
[
XR Headsets
]
有線 XR グラス

このガイドでは、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 Plug-in Management パッケージを使用して有効にできます 。XR プラグイン マネージャーには、XR プラグインの読み込み、初期化、設定、ビルドのサポートを管理して提供するためのプロジェクト設定が追加されています。アプリが実行時に OpenXR 機能を実行できるようにするには、プラグイン マネージャーでこれらの機能を有効にする必要があります。

次の図は、Unity のエディタでこれらの機能グループを有効にできる場所の例を示しています。

図 1.Unity XR Plug-in Management 画面の例。

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 パッケージと Unity 用 Android XR 拡張機能パッケージでサポートされている機能を示します。この表を使用して、必要な機能を含むパッケージと互換性に関する考慮事項を確認できます。

機能

Unity OpenXR: Android XR 機能文字列

Unity 用 Android XR 拡張機能の機能文字列

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

AR セッション

Android XR: AR セッション

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

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

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

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

デバイス トラッキング

なし

なし

デバイス トラッキングは、物理空間でのデバイスの位置と回転を追跡するために使用されます。XR Origin GameObject は、XROrigin コンポーネントと GameObject 階層(カメラと TrackedPoseDriver を含む)を使用して、デバイス トラッキングを自動的に処理し、トラッキング可能なオブジェクトを 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_eye_tracking のみ
  • 顔追跡なし

Android XR: 顔追跡

  • XR_ANDROID_face_tracking

アバターの目のサポートは、Android XR: AR 顔機能によって提供されます。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 拡張機能のフォービエイション(従来)機能は、組み込みレンダリング パイプラインと OpenGL ES もサポートしています。可能な場合は Unity のフォービエイテッド レンダリング機能を使用することをおすすめします。Android XR 用にビルドする場合は、URP と Vulkan の両方を使用することをおすすめします。

無制限の参照空間

なし

Android XR: 無制限の参照空間

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

環境ブレンド モード

なし

環境ブレンド モード

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

入力とインタラクション

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

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

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

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

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

手操作

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

視線操作

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

android.permission.EYE_TRACKING_FINE

コントローラ操作

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

マウス操作

Android XR マウス操作プロファイル(XR_ANDROID_mouse_interaction は、Unity 用 Android XR 拡張機能によって提供されます。Unity Input System で <AndroidXRMouse> デバイス レイアウトを公開します。

手のひらポーズ操作

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

XR Hands

XR Hands パッケージを使用すると、 XR_EXT_hand_trackingXR_FB_hand_tracking_aim を使用してハンド トラッキング データにアクセスし、 ハンド トラッキングから入力ポーズにハンド ジョイント データを変換するラッパーを提供できます。XR Hands パッケージで提供される機能を使用するには、[Hand Tracking Subsystem] 機能と [Meta Hand Tracking Aim OpenXR] 機能を有効にします。

ハンド トラッキングを有効にする方法を示す例 XR Hands パッケージは、より詳細な手のポーズや手の関節データが必要な場合、またはカスタム ジェスチャーを使用する必要がある場合に便利です。

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

顔追跡の信頼度領域

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 パッケージには、手の ビジュアライザーというサンプルが含まれています。このサンプルには、ユーザーの手のコンテキストに適した表現をレンダリングするための、完全にリギングされた左右の手 が含まれています。

システム ジェスチャー

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. の商標であり、中国、欧州連合、日本、英国で商標登録されています。