このガイドでは、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 Toolkit、AR Foundation、OpenXR Plugin を使用する複合現実テンプレートが含まれており、すぐに使用を開始できます。Android XR 用 Unity でアプリをビルドする場合は、レンダリング パイプラインとして Universal Render Pipeline(URP)、グラフィック API として Vulkan を使用することをおすすめします。これらの機能を使用すると、 Vulkan でのみサポートされている Unity のグラフィック機能の一部を利用できます。これらの設定を構成する方法について詳しくは、プロジェクト設定ガイドをご覧ください。
Unity XR の基本
Unity または XR 開発を初めて使用する場合は、Unity の XR マニュアルを参照して、XR の基本的なコンセプトとワークフローを理解してください。XR マニュアルには、次の情報が記載されています。
- XR プロバイダ プラグイン(Unity OpenXR: Android XR、Android XR Extensions for Unity など)
- XR サポート パッケージは、追加のアプリケーション レベルの 機能を追加します
- Unity XR テクノロジー スタックと XR サブシステムについて説明する XR アーキテクチャ ガイド
- XR プロジェクトのセットアップ
- XR アプリのビルドと実行
- XR グラフィック ガイダンス。Universal Render Pipeline、 ステレオ レンダリング、視線追跡型レンダリング、マルチビュー レンダリング領域、VR フレーム タイミングなど
- 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 エディタでこれらの機能グループを有効にできる場所の例を示しています。
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 機能文字列 |
ユースケースと想定される動作 |
|---|---|---|---|
Android XR: AR セッション
|
Android XR(拡張機能): セッション管理
|
いずれかのパッケージの機能を使用するには、そのパッケージの 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 顔
|
Android XR: 顔追跡
|
アバターの目のサポートは、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: パススルー合成レイヤ
|
Unity の合成レイヤのサポートを使用して、基本的な 合成レイヤ(四角形、円柱、投影など)を作成します。Android XR: パススルー合成レイヤを使用して、Unity の GameObject から読み取り、カスタム メッシュを含むパススルー レイヤを作成できます。 |
|
視線追跡型レンダリング(OpenXR プラグインが必要)
|
視線追跡型レンダリング(レガシー) |
視線追跡型レンダリングを使用すると、ユーザーの周辺視野の領域の解像度を下げることで、レンダリングを高速化できます。Unity の 視線追跡型レンダリング機能は、URP と Vulkan を使用するアプリでのみサポートされています。Android XR Extensions for Unity の視線追跡型レンダリング(レガシー)機能は、組み込みのレンダリング パイプラインと OpenGL ES もサポートしています。可能な場合は Unity の視線追跡型レンダリング機能を使用することをおすすめします。Android XR 用にビルドする場合は、URP と Vulkan の両方を使用することをおすすめします。 |
|
なし |
この機能は、XRInputSubsystem トラッキングの原点モードを 無制限 に設定します。無制限は、XRInputSubsystem がワールド アンカーに関連するすべての InputDevices を追跡することを示します。ワールド アンカーは変更される可能性があります。 |
||
なし |
環境ブレンドモード |
この機能を使用すると、XR 環境ブレンドモードを設定できます。このモードは、パススルーが有効になっている場合に、仮想画像が現実世界の環境とどのようにブレンドされるかを制御します。 |
|
なし |
|
||
なし |
クラウド バックエンド サービスのセッション認証構成戦略(API キー、キーレス、認証トークン)を提供します。 |
||
なし |
構成可能なマルチモーダル顔追跡モード( |
||
なし |
|
||
Android XR: AR カメラ |
なし |
Unity の ARCameraFeature を使用して、現実世界のパススルーの減光レベルのクエリと設定を有効にします。 |
|
なし |
|
||
なし |
|
入力とインタラクション
Android XR は、マルチモーダルな自然入力をサポートしています。
ハンド トラッキングとアイトラッキングに加えて、6DoF コントローラ、マウス、物理キーボードなどの周辺機器もサポートされています。つまり、Android XR 用アプリはハンド インタラクションをサポートすることが想定されており、すべてのデバイスにコントローラが付属しているとは限りません。
インタラクション プロファイル
Unity は インタラクション プロファイルを使用して、XR アプリケーションがさまざまな XR デバイスやプラットフォームと通信する方法を管理します。これらのプロファイルは、さまざまなハードウェア構成の想定される入力と出力を確立し、さまざまなプラットフォームで互換性と一貫した機能を実現します。インタラクション プロファイルを有効にすると、XR アプリケーションがさまざまなデバイスで正しく機能し、一貫した入力マッピングを維持し、特定の XR 機能にアクセスできるようになります。インタラクション プロファイルを設定する手順は次のとおりです。
- [Project Settings] ウィンドウを開きます(メニュー: Edit > Project Settings )。
- [XR Plug-in Management] をクリックして、必要に応じてプラグイン セクションを開きます。
- XR プラグインのリストから [OpenXR] を選択します。
- [Interaction Profiles] セクションで、[+] ボタンを選択してプロファイルを追加します。
- リストから追加するプロファイルを選択します。
ハンド インタラクション
ハンド インタラクション(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 Mouse Interaction Profile (XR_ANDROID_mouse_interaction)
は、Android XR Extensions for Unity によって提供されます。Unity Input System で
<AndroidXRMouse> デバイス レイアウトを公開します。
手のひらポーズのインタラクション
OpenXR プラグインは、手のひらポーズ
インタラクション(XR_EXT_palm_pose)のサポートを提供します。これにより、<PalmPose> レイアウトが Unity Input System 内で公開されます。
手のひらポーズは、より複雑なユースケースでハンド トラッキングを実行する拡張機能やパッケージの代替として使用するものではありません。代わりに、アバターのビジュアルなどのアプリ固有のビジュアル コンテンツを配置するために使用できます。手のひらポーズは、手のひらの位置と向きの両方で構成されます。
XR Hands
XR Hands パッケージを使用すると、
XR_EXT_hand_tracking と
XR_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 パッケージには、
へのアクセスを提供する手のメッシュ機能が含まれています。XR_ANDROID_hand_mesh extension手のメッシュ機能は、ユーザーの手のメッシュを提供します。手のメッシュには、手のジオメトリを表す三角形の頂点が含まれています。この機能は、視覚化のためにユーザーの手の実際のジオメトリを表すパーソナライズされたメッシュを提供するために使用することを目的としています。
XR Hands プレハブ
XR Hands パッケージには、手の ビジュアライザーというサンプルが含まれています。このサンプルには、ユーザーの手のコンテキストに応じた表現をレンダリングするための、完全にリギングされた左右の手 が含まれています。
システム ジェスチャー
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. の商標であり、中国、欧州連合、日本、英国で商標登録されています。