Dual Render Fusionコンポーネント
このセクションでは、Dual Render Fusionに含まれるすべての新しいコンポーネントの機能について紹介します。
Dual Render FusionのセットアップガイドのProject Validatorの修正を適用するステップは、シーンに追加のコンポーネントを追加します。
これらのゲームオ ブジェクトを手動で作成するために、便利な機能が用意されています。
これらは2通りのメニューから使用できます。
- シーンのHierarchyで右クリックし、
XR > Dual Render Fusion
- メニューバーの
GameObject > XR > Dual Render Fusion
Dynamic OpenXR Loaderコンポーネント
Dynamic OpenXR Loaderコンポーネントは、ARグラスが接続された後にアプリがOpenXRをロードすることを可能にします。このコンポーネントは、Spaces Glass Statusコンポーネントと一緒に動作し、サポートされているARグラスの存在を検出し、設定されていればOpenXRを起動します。
OpenXRが接続を開始した時のUIの動作を制御するために、いくつかのコールバックが用意されています。これらのコールバックは、Spaces Lifecycle Eventsコンポーネントを通して開発者に公開されます。
Dynamic OpenXR Loaderは、シーン遷移に耐えられるように設計されています。
これはルートレベルのGameObjectに存在する必要があり、実行時に自動的にDontDestroyOnLoad
に設定されます。
Dynamic OpenXR Loaderは、アプリ起動時の初期に作成され、ARグラスの接続が検出された時にシーンに表示するXRコンテンツが無くても、アプリが終了するまで持続することを目的としています。
Dynamic OpenXR Loaderコンポーネントを使用するには、Project Settings > XR Plug-In Management
で、Initialize XR on Startupを無効にする必要があります。
これは通常、Fusionのプロジェクト設定の変更のメニュー項目を使った自動セットアップで設定されます。
Dynamic OpenXR Loaderのプロパティ
- Auto Start XR On Display Connected
- 有効の場合、サポートされているARグラスが接続されると、アプリは自動的にOpenXRを起動します。
- 無効の場合、開発者はXRが必要になる時に、Dynamic OpenXR Loaderコンポーネントの
StartOpenXR
メソッドを呼び出す必要があります。
開発者は、手動でOpenXRを開始および停止することができます。
DynamicOpenXRLoader.Instance.StartOpenXR();
...
DynamicOpenXRLoader.Instance.StopOpenXR();
StartOpenXR
は、サポートされているARグラスが接続されている場合にのみ成功します。
詳細はSpaces Glass Statusコンポーネントを参照してください。
OpenXRが起動を開始すると、メインスレッドは短時間ブロックされます。OpenXRが起動中であることを示すUIを表示し、読み込み完了時に完了したことを表示するのをお勧めします。
- Auto Manage XR Camera
- この機能を有効にすると、OpenXR の起動・停止時に、AR SessionとAR Session Originを含むゲームオブジェクトが必要に応じて有効/無効になります。
AR Foundation 5.0以降を使用している場合、Dynamic OpenXR Loaderコンポーネントは、代わりにXROriginコンポーネントを見つけて有効/無効を切り替えます。
-
Cannot Display Overlay Dialog Options Provider
- このオプションのフィールドは、OpenXRランタイムのアプリケーションで「他のアプリに重ねて表示」の権限が許可されていない場合に、ユーザーに表示するテキストをカスタマイズするために使用します。
この権限が許可されていない場合、Dual Render Fusionのコンテンツは描画できません。
- このオプションのフィールドは、OpenXRランタイムのアプリケーションで「他のアプリに重ねて表示」の権限が許可されていない場合に、ユーザーに表示するテキストをカスタマイズするために使用します。
-
Runtime Camera Permissions Dialog Options Provider
-
Application Too Old For Runtime Dialog Options Provider
- このオプションのフィールドを使用して、アプリケーションがOpenXRランタイムに対して古すぎる場合にユーザーに表示するテキストをカスタマイズできます。
-
Runtime Too Old For Application Dialog Options Provider
- このオプションのフィールドを使用して、OpenXRランタイムがアプリケーションに対して古すぎる場合にユーザーに表示されるテキストをカスタマイズできます。
-
Runtime Validation Failure Dialog Options Provider
- このオプションのフィールドを使用して、Older Runtime Compatibility機能が失敗のエラーをスローしたときにユーザーに表示されるテキストをカスタマイズできます。
Older Runtime Compatibility についての詳細は、専用ページをご覧ください。
これらのフィールドはSimple Dialog Options Providerコンポーネントを受け入れます。このコンポーネントはアプリケーション開発者によって実装されるべきで、メソッドを実装しなければなりません。
public override SimpleDialogOptions GetDialogOptions()
SimpleDialogOptions
の戻り値は各テキスト入力をカスタマイズする文字列を含みます。
- Title
- Message
- PositiveButtonText
- NegativeButtonText
このテキストは、希望するローカライゼーションのツールチェーンで動作するDialog Options Providerを実装することによって、ローカライズすることができます。
例 えば、Unity.Localization
パッケージを使用している場合、Providerの開発者の実装は、単に文字列テーブルでローカライズされたテキストを検索することができます。
public class LocalizedSimpledDialogOptionsProvider : SimpleDialogOptionsProvider
{
public LocalizedString Title;
public LocalizedString Message;
public LocalizedString PositiveButton;
public LocalizedString NegativeButton;
public override SimpleDialogOptions GetDialogOptions()
{
return new SimpleDialogOptions()
{
Title = this.Title.GetLocalizedString(),
Message = this.Message.GetLocalizedString(),
PositiveButtonText = this.PositiveButton.GetLocalizedString(),
NegativeButtonText = this.NegativeButton.GetLocalizedString()
};
}
}
実装されているSimple Dialog Options Providerコンポーネントを、シーン内のDynamic OpenXR Loaderコンポーネントに、直接アタッチすることをおすすめします。
Dialog Options Providerが指定されていない場合、Cannot Display Overlay Dialog Options Providerに以下のデフォルトの英語のテキストが使用されます。
- Title
- OpenXR Runtime permissions
- Message
- The 'Display over other apps' permission is required for the OpenXR runtime to render XR content. Select 'Configure' to grant this permission manually by selecting 'Snapdragon Spaces Services' from the list shown.
- Positive Button
- Configure
- Negative Button
- Not Now
Dialog Options Providerが指定されていない場合、Runtime Camera Permissions Dialog Options Providerには以下のデフォルトの英語のテキストが使用されます。
- Title
- OpenXR Runtime permissions
- Message
- Camera permissions for the OpenXR runtime are not granted. Some features might not work. Would you like to grant the camera permissions now? If you select yes, this application will close and you will need to re-start it.
- Positive Button
- Yes
- Negative Button
- Not Now
Spaces Glass Statusコンポーネント
Spaces Glass Statusコンポーネントは、アプリが動作しているデバイスタイプの情報にアクセスし、ARグラスの接続状態に関連する情報を取得するために使用されます。
Spaces Glass Statusコンポーネントは単独でも使用できますが、XRコンテンツのライフサイクルをより簡単に管理するために、Dynamic OpenXR Loaderコンポーネントと一緒に使用することをお勧めします。
Spaces Glass Statusは、シーンの遷移にも耐えられるように設計されています。
実行時に自動的にDontDestroyOnLoad
に設定されるルートレベルのGameObjectに存在する必要があります。(これは、Dynamic OpenXR Loaderと同じオブジェクトである可能性が高いです。)
Spaces Glass Statusは、アプリ起動時の初期に作成され、ARグラスの接 続が検出された時にシーンに表示するXRコンテンツが無くても、アプリが終了するまで持続することを意図しています。
このコンポーネントは、Spaces Lifecycle Eventsコンポーネントを通して開発者にコールバックを公開します。
開発者はさらに、以下のように実行時にコードを通して、このデータを照会することができます。
Spaces Glass Statusの利用可能なデータ
グラスの接続状態(GlassConnectionState)
var connectionState = SpacesGlassStatus.Instance.GlassConnectionState;
- グラスの接続状態は
Disconnected
またはConnected
のいずれかです。
グラスのアクティブ状態(GlassActiveState)
var activeState = SpacesGlassStatus.Instance.GlassActiveState;
- グラスのアクティブ状態は
Active
またはIdle
のいずれかです。 - グラスが切断されている場合、グラスを
Active
にすることはできません。 Idle
は、グラスが装着されていないことを示します。これは、例えば近接センサーのタイムアウトによってトリガーされることがあります。これは、品質を下げることによってレンダリングの優先順位を下げたり、高負荷のコードセクションの作業負荷を減らすことによって電力を節約することができます。
デバイスの種類(DeviceType)
var deviceType = SpacesGlassStatus.Instance.DeviceType;
- デバイスの種類は大まかなカテゴリに分かれています。これらのカテゴリは、与えられたカテゴリにコンテンツを表示する最適な方法をアプリに通知するのに役立ちます。
- デバイスの種類は
None
、Aio
、Wired
、Wireless
のいずれかです。None
:グラスの接続状態(GlassConnectionState)が現在Disconnected
であることを示します。Aio
:All-In-Oneグラス(MRやVRヘッドセットビューアなど)です。Wired
:スマートフォンにケーブルで接続されたARグラスです。Wireless
:スマートフォンにワイヤレスで接続されるARグラスです。
Spaces Host Viewコンポーネント
Spaces Host Viewコンポーネントは、Dual Render FusionをサポートしていないMR/VRデバイス上でアプリを実行する際に、スマートフォンの表示を動的に無効にします。
さらに、MR/VRデバイス用の代替UIを有効にするなど、必要に応じて追加機能を有効/無効にするために開発者が使用できるコールバックを提供します。これらのコールバックは、Spaces Lifecycle Eventsコンポーネントを通して開発者に公開されます。
このコンポーネン トには、スマートフォンのディスプレイにレンダリングするカメラが含まれています。
Spaces Host Viewは、シーンの切り替えに耐えられるように設計されています。
これはルートレベルのGameObjectに存在する必要があり、実行時に自動的にDontDestroyOnLoad
に設定されます。
Spaces Host Viewは、アプリ起動時のできるだけ早い段階で作成され、アプリが終了するまで持続するように意図されています。Dual Render Fusionを使用するために作成されたアプリが、MR/VRヘッドセットなどの互換性のないデバイスで起動された場合、Spaces Host Viewは早期にイベントをブロードキャストします。このような場合、スマートフォン特有の表示を隠すなどの対処が必要です。
Spaces Lifecycle Eventsコンポーネント
Spaces Lifecycle Eventsコンポーネントは、Dynamic OpenXR Loader、Spaces Glass Status、Spaces Host Viewコンポーネントに関連するすべてのイベントを収集します。
MiRZAはスマートフォンと無線で接続するため、他のグラスに比べ切断が起きやすいです。
そのため、Spaces Lifecycle Eventsを使用してグラスが切断されてから復帰するまでの処理をアプリの機能に応じて行う必要があります。
Spaces Lifecycle Eventsは、上記のクラスとは異なり、シーンの切り替えに耐えられるようには設計されていません。シーンごとにインスタンス化する必要があります。各シーンで、開発者は、公開された各イベントの動作を設定することができます。
開発者は、ARグラスが接続されたり切断されたりしたときの各シーンの動作をコントロールすることができます。
メニューシーンでは、追加のXRコンテンツは表示されないかもしれませんが、グラスが正常に検出されたことを示すUI要素があるかもしれません。 XRコンテンツが必要なシーンでは、グラスの切断によってメニューシーンに戻るか、スマートフォンにポップアップを表示して、グラスが再接続されない限りアプリを実行し続けることができないことを示す必要があるかもしれません。