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の動作を制御するために、いくつかのコールバックが用意されています。これらのコールバックは、Fusion 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コンポーネントを見つけて有効/無効を切り替えます。
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コンテンツが無くても、アプリが終了するまで持続す ることを意図しています。
このコンポーネントは、Fusion 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を有効にするなど、必要に応じて追加機能を有効/無効にするために開発者が使用できるコールバックを提供します。これらのコールバックは、Fusion Lifecycle Eventsコンポーネントを通して開発者に公開されます。
このコンポーネントには、スマートフォンのディスプレイにレンダリングするカメラが含まれています。
Spaces Host Viewは、シーンの切り替えに耐えられるように設計されています。
これはルートレベルのGameObjectに存在する必要があり、実行時に自動的にDontDestroyOnLoad
に設定されます。
Spaces Host Viewは、アプリ起動時のできるだけ早い段階で作成され、アプリが終了するまで持続するように意図されています。Dual Render Fusionを使用するために作成されたアプリが、MR/VRヘッドセットなどの互換性のないデバイスで起動された場合、Spaces Host Viewは早期にイベントをブロードキャストします。このような場合、スマートフォン特有の表示を隠すなどの対処が必要です。
Fusion Lifecycle Eventsコンポーネント
Fusion Lifecycle Eventsコンポーネントは、Dynamic OpenXR Loader、Spaces Glass Status、Spaces Host Viewコンポーネントに関連するすべてのイベントを収集します。
MiRZAはスマートフォンと無線で接続するため、他のグラスに比べ切断が起きやすいです。
そのため、Fusion Lifecycle Eventsを使用してグラスが切断されてから復帰するまでの処理をアプリの機能に応じて行う必要があります。
Fusion Lifecycle Eventsは、上記のクラスとは異なり、シーンの切り替えに耐えられるようには設計されていません。シーンごとにインスタンス化する必要があります。各シーンで、開発者は、公開された各イベントの動作を設定することができます。
開発者は、ARグラスが接続されたり切断されたりしたときの各シーンの動作をコントロールすることができます。
メニューシーンでは、追加のXRコンテンツは表示されないかもしれませんが、グラスが正常に検出されたことを示すUI要素があるかもしれません。 XRコンテンツが必要なシーンでは、グラスの切断によってメニューシーンに戻るか、スマートフォンにポップアップを表示して、グラスが再接続されない限りアプリを実行し続けることができないことを示す必要があるかもしれま せん。
Fusion Lifecycle Eventsのプロパティ
Rebroadcast On Scene Loadを有効にすると、Fusion Lifecycle Eventsコンポーネントは、シーンの切り替え時に、On OpenXR Available、On OpenXR Unavailable、On OpenXR Started、On OpenXR Stoppedのイベントをリブロードキャストすることができます。これにより、シーンのロードが完了した時に、接続されているデバイスの機能に応じて、シーンを正しく設定することができます。
イベント
On OpenXR Available
- このイベントは、Dynamic OpenXR Loaderコンポーネントが有効になっている際に、OpenXRを開始する前とOpenXRを停止した後にブロードキャストされます。