メインコンテンツまでスキップ
バージョン: 1.0.2

HeadwornのシーンをDRFに対応させる方法

このページでは、機能サンプル等のHeadwornで動作することを前提としたシーンを、DRFで動作させる方法を紹介します。

セットアップ手順

1. DRFに必要なオブジェクトの追加

  1. DRFのサンプル「Fusion Samples」をインポートします。

  2. 以下のDRF用のシーンを開きます。

    • Assets/Samples/Snapdragon Spaces/X.X.X/Fusion Samples/Scenes/ControllerPrefabSampleScene
       
  3. 上記のDRF用のシーン内で、以下のオブジェクトをCopyします。

    • Fusion Interaction
    • Fusion Scene Manager
    • Dynamic OpenXR Loader
       
  4. DRFに対応させたいHeadwornのシーンを開き、CopyしたオブジェクトをPasteします。
       

2. SpacesLifecycleEventsの設定

  1. Fusion Scene Managerオブジェクトを選択します。
  2. 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は不要なので非アクティブにします。
  • UIUIMain 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以外の操作にポインターを使用する場合は、設定を変更する必要があります。

  1. Sample Assets/XXX Sample Controllerオブジェクトを選択します。
  2. AnchorSampleControllerコンポーネントのTrigger Actionを以下のInput Actionに変更します。
    • Controller Prefab/Select (Input Action Reference)  
Input Actionについて

DRF用のポインターが使用するInput Actionについては以下の手順で確認できます。

  1. Hierarchy内の以下のオブジェクトを選択します。
    • Fusion Interaction/Canvas Controller/Controller Position Head Mirror/Controller Relative Position/Pointer/Device Pointer
  2. XR ControllerコンポーネントのSelect Action内で参照しているInput Actionを左クリックします。

5. 権限の要求

DRF用の権限の要求方法について

カメラへのアクセス」や「ネットワークへアクセス」の権限を必要とするシーンの場合、DRF用の方法で権限を要求する必要があります。

ヒットテスト等の「カメラへのアクセス」を必要としないシーンの場合、この手順は不要です。

  1. 以下のような権限を要求するスクリプトを作成します。(例として、カメラへのアクセス権限を要求する場合)
using UnityEngine;
using UnityEngine.Android;

public class RequestCameraPermission : MonoBehaviour
{
private void Awake()
{
if (!Permission.HasUserAuthorizedPermission(Permission.Camera))
{
Permission.RequestUserPermission(Permission.Camera);
}
}
}
  1. 作成したスクリプトを適当なオブジェクトにアタッチします。
     

6. 必要無いコンポーネントの削除

画像トラッキングの場合

  1. シーン内のXR Origin (XR Rig)オブジェクトを選択します。
  2. Spaces Reference Image Configuratorコンポーネントを、「」>「Remove Component」で削除します。
    • ※DRFのシーンの場合は、Spaces Reference Image Configuratorコンポーネントが存在すると正常に動作しなくなります。
       

以上で、セットアップは完了です。

動作状況

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