HeadwornのシーンをDRFに対応させる方法
このページでは、機能サンプル等のHeadwornで動作することを前提としたシーンを、DRFで動作させる方法を紹介します。
セットアップ手順
1. DRFに必要なオブジェクトの追加
-
以下のDRF用のシーンを開きます。
Assets/Samples/Snapdragon Spaces/X.X.X/Fusion Samples/Scenes/ControllerPrefabSampleScene
-
上記のDRF用のシーン内で、以下のオブジェクトをCopyします。
Fusion Interaction
Fusion Scene Manager
Dynamic OpenXR Loader
-
DRFに対応させたいHeadwornのシーンを開き、CopyしたオブジェクトをPasteします。
2. SpacesLifecycleEventsの設定
Fusion Scene Manager
オブジェクトを選択します。SpacesLifecycleEvents
コンポーネントで、以下の設定を行います。On OpenXR Unavailable()
に、以下のオブジェクトをGameObject.SetActive
のチェックを無効にして登録します。UI
Sample Assets
XR Origin (XR Rig)
On OpenXR Started()
に、以下のオブジェクトをGameObject.SetActive
のチェックを有効にして登録します。UI
Sample Assets
XR 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を操作出来ません。トラックパッドの状態を取得出来ません。 |