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 パッケージ
      • Android XR Extensions for Unity
      • 機能と互換性に関する考慮事項
  • 入力とインタラクション

Android XR 用 Unity のサポート

Android XR 用 Unity アプリをビルドする際は、Unity 6 の最新バージョンで提供されている複合現実ツールと機能を利用できます。これには、XR Interaction ToolkitAR Foundation、およびOpenXR Pluginを使用する複合現実テンプレートが含まれており、すぐに使い始めることができます。Android XR 用 Unity でアプリをビルドする場合は、レンダリング パイプラインとして Universal Render Pipeline(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 パッケージは実装を提供します。このパッケージの使用を開始するには、スタートガイドが記載されているパッケージ マニュアルをご覧ください。

Android XR Extensions for Unity

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

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

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

次の表に、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 コンポーネントと GameObject 階層(カメラと TrackedPoseDriver を含む)を使用して、デバイスのトラッキングとトラッキング可能なオブジェクトの Unity の座標系への変換を自動的に処理します。

カメラ

Android XR: AR カメラ

なし

この機能は、照明の推定とフルスクリーン パススルーをサポートします。

平面検出

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 アンカー

なし

AR アンカーは、AR Foundation を介して空間アンカー、平面アンカー、永続アンカーをサポートします。

オクルージョン

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 を使用するアプリでのみサポートされています。Android XR Extensions for Unity の視線追跡型レンダリング(従来)機能は、Built-in Render Pipeline と OpenGL ES もサポートしています。可能な限り Unity の視線追跡型レンダリング機能を使用することをおすすめします。Android XR 用にビルドする場合は、URP と Vulkan の両方を使用することをおすすめします。

無制限の参照空間

なし

Android XR: 無制限の参照空間

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

環境ブレンド モード

なし

環境ブレンド モード

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

地理空間(VPS)

なし

Android XR: 地理空間

XRGeospatialManager が Visual Positioning System(VPS)機能にアクセスし、位置情報の可用性を確認して、地理空間ポーズを計算できるようにします。

Google Cloud Auth

なし

Android XR: Google Cloud

クラウド バックエンド サービスのセッション認証構成戦略(API キー、キーレス、認証トークン)を提供します。

マルチモーダル フェイス

なし

Android XR(拡張機能): マルチモーダル フェイス

構成可能なマルチモーダル顔追跡モード(XRFaceTrackerMode)を使用して Unity ARFace を拡張します。

バッテリー残量の表示

なし

バッテリー残量の表示

XRBatteryStateDisplayFeature を使用して、接続されているコントローラと入力パスのランタイム バッテリー ステータスと充電レベルをクエリできます。

グローバル パススルーの減光

Android XR: AR カメラ

なし

Unity の ARCameraFeature を使用して、現実世界のパススルーの減光レベルをクエリして設定できます。

システム プロパティの列挙

なし

Android XR: システム プロパティ

XR_ANDROID_enumerate_system_extension_properties を使用して、ランタイム拡張機能のプロパティとデバイス機能を列挙します。

おすすめ設定

なし

Android XR: おすすめ設定

`XRRecommendedSettingsFeature.TryGetRecommendedSettings` を使用して、ランタイム環境の事前起動状態(環境ブレンド モード、パススルーの不透明度、アクティブな入力モードなど)をクエリできます。

入力とインタラクション

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

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

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

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

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

ハンド インタラクション

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

視線追跡インタラクション

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

コントローラ インタラクション

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

マウス インタラクション

Android XR マウス インタラクション プロファイル (XR_ANDROID_mouse_interaction) は、Android XR Extensions for Unity によって提供されます。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 パッケージで提供される機能を使用するには、[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;
        }
    }
}

詳細については、 Android XR Extensions for Unity のドキュメントをご覧ください。

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

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

手のメッシュ

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

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