HeadwornのシーンをDRFに対応させる方法
このページでは、機能サンプル等のHeadwornで動作することを前提としたシーンを、DRFで動作させる方法を紹介します。
セットアップ手順
1. DRFに必要なオブジェクトの追加
-
以下のDRF用のシーンを開きます。
Assets/Samples/Snapdragon Spaces/X.X.X/Fusion Samples/Scenes/ControllerPrefabSampleScene

-
上記のDRF用のシーン内で、以下のオブジェクトをCopyします。
Fusion InteractionFusion Scene ManagerDynamic OpenXR Loader

-
DRFに対応させたいHeadwornのシーンを開き、CopyしたオブジェクトをPasteし ます。

2. SpacesLifecycleEventsの設定
Fusion Scene Managerオブジェクトを選択します。SpacesLifecycleEventsコンポーネントで、以下の設定を行います。On OpenXR Unavailable()に、以下のオブジェクトをGameObject.SetActiveのチェックを無効にして登録します。UISample AssetsXR Origin (XR Rig)
On OpenXR Started()に、以下のオブジェクトをGameObject.SetActiveのチェックを有効にして登録します。UISample AssetsXR Origin (XR Rig)

非アクティブにする理由について
上記の手順を行うことで、On OpenXR Unavailable()の場合にゲームオブジェクトは非アクティブになり、On OpenXR Started()の場合にゲームオブジェクトはアクティブになります。
- 「グラスがスマホと接続される前」→「OpenXRが利用不可」→「
On OpenXR Unavailable()」 - 「グラスがスマホと接続された後」→「OpenXRが起動した後」→「
On OpenXR Started()」
それぞれのゲームオブジェクトについての補足
XR Origin (XR Rig):グラスと接続されていない場合は、Main Cameraは不要なので非アクティブにします。UI:UIをMain Cameraに追従させる機能を動作させるために、Main Cameraがアクティブになってから、UIの オブジェクトをアクティブにする必要があります。Sample Assets:カメラへのアクセス等の権限の取得が完了し、グラスのセンサーを使用した機能が利用可能になるのを待つために、グラスと接続された後にオブジェクトをアクティブにする必要がある場合があります。
非アクティブにするオブジェクトについて
上記は機能サンプルのシーンを元にする場合の説明です。Headwornのシーンによっては、シーン構造が異なる可能性があります。
その場合でも、基本的にはHeadwornのシーンに元々あったオブジェクトを、同じようにSpacesLifecycleEventsコンポーネントで設定を行えば問題ありません。
※AR SessionオブジェクトやSpaces XR Simulatorオブジェクトは、特に設定を行う必要はありません。
3. Headworn用のポインターの削除
XR Origin (XR Rig)/Camera Offset/Spaces Simple Interaction/Controller Manager/Host Controller Pointerオブジェクトを削除します。

4. Triger Actionの変更
ポインターによる操作について
Headworn用のシーンのUI は基本的には、DRF用のポインターでも操作出来ます。 しかし、空間アンカーのようにUI以外の操作にポインターを使用する場合は、設定を変更する必要があります。
Sample Assets/XXX Sample Controllerオブジェクトを選択します。AnchorSampleControllerコンポーネントのTrigger Actionを以下のInput Actionに変更します。Controller Prefab/Select (Input Action Reference)
Input Actionについて
DRF用のポインターが使用するInput Actionについては以下の手順で確認できます。
Hierarchy内の以下のオブジェクトを選択します。Fusion Interaction/Canvas Controller/Controller Position Head Mirror/Controller Relative Position/Pointer/Device Pointer
XR ControllerコンポーネントのSelect Action内で参照しているInput Actionを左クリックします。

5. 権限の要求
DRF用の権限の要求方法について
「カメラへのアクセス」や「ネットワークへアクセス」の権限を必要とするシーンの場合、DRF用の方法で権限を要求する必要があります。
- 以下のような権限を要求するスクリ プトを作成します。(例として、カメラへのアクセス権限を要求する場合)
using UnityEngine;
using UnityEngine.Android;
public class RequestCameraPermission : MonoBehaviour
{
private void Awake()
{
if (!Permission.HasUserAuthorizedPermission(Permission.Camera))
{
Permission.RequestUserPermission(Permission.Camera);
}
}
}
- 作成したスクリプト を適当なオブジェクトにアタッチします。

6. 必要無いコンポーネントの削除
画像トラッキングの場合
- シーン内の
XR Origin (XR Rig)オブジェクトを選択します。 Spaces Reference Image Configuratorコンポーネントを、「︙」>「Remove Component」で削除します。- ※DRFのシーンの場合は、
Spaces Reference Image Configuratorコンポーネントが存在すると正常に動作しなくなります。

- ※DRFのシーンの場合は、
以上で、セットアップは完了です。
動作状況
| サンプル名 | DRF化後の動作状況 |
|---|---|
| カメラへのアクセス | 正常に動作 します。 |
| ハンドトラッキング | 警告が表示されるため、追加の修正が必要です。ハンドトラッキング機能は正常に動作します。 |
| ヒットテスト | 正常に動作します。 |
| 空間アンカー | 正常に動作します。 |
| 空間メッシュ | 動作しません。 |
| 平面検出 | 正常に動作します。 |
| 画像トラッキング | 正常に動作します。 |
| QRコードトラッキング | 正常に動作します。 |
| XR Interaction Toolkit | UIを操作出来ません。トラックパッドの状態を取得出来ません。 |