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

Dual Render Fusionのセットアップガイド

このガイドでは、UnityでSnapdragon Spaces SDKを使用してDual Render Fusionを有効にする方法を詳しく紹介します。

前提条件

Unityのバージョンについて

Snapdragon Spacesで動作するUnity Editorの推奨バージョンは2022.3 LTS(2022.3.16f1以降)です。他のバージョンのUnity Editorは十分にテストされていないため、不具合が発生する可能性があります。

.apkファイルをエクスポートするには、Unity Editorのインストール時にAndroid Build Supportモジュールを追加する必要があります。このモジュールはUnity Hubから追加することができます。

このガイドでは、Snapdragon SpacesプロジェクトがUnityセットアップガイドに従って設定されていることを前提としています。

OpenXR Pluginのバージョンの確認

OpenXRのバージョンについて

Snapdragon Spacesが動作するOpenXR Pluginの推奨バージョンは1.10.0です。
1.11.0以降など他のバージョンは、Dual Render Fusionのアプリで、スマートフォンの画面が表示されない等の不具合が発生する可能性が高いです。

  • Window > Package ManagerからOpenXR Pluginのバージョンが1.6.0〜1.10.0の間であることを確認します。
    alt text
  • 1.12.1など他のバージョンである場合は、次の手順で1.10.0を指定してOpenXR Pluginをインポートします。

OpenXR Pluginのバージョンの指定(v1.10.0)

  1. Package Managerの左上の「+▼」から「Add package by name...」を選択します。 alt text
  2. 以下のように1.10.0のバージョンを指定して、OpenXR Pluginをインポートします。
    • Name:com.unity.xr.openxr
    • Version:1.10.0 alt text

サンプルのインポート

Snapdragon Spaces SDKパッケージには、Dual Render Fusionの使い方を紹介するサンプルアセットが内包されています。
インポートするには、パッケージマネージャー(Window > Package Manager)でパッケージを選択し、Fusion Samplesのインポートをクリックします。
alt text

インポートすると、Dual Render Fusion機能の様々な特徴を紹介する以下のシーンが利用できます。 alt text

  • Controller Prefab Sample Scene

    • Android Companion Controller for Snapdragon SpacesをUnityプレハブに適合させるためのサンプルシーンで、設定と終了ボタンを制御できます。詳細はCompanion Controllerを参照してください。
  • LandscapeUISampleScene

    • スマートフォンを横向きにしてUIを操作するサンプルシーンです。UIでキューブを操作できます。
  • OpenXRLoadingTest

    • スマートフォンでアプリを即座に起動し、ARグラスとの接続を確立するとOpenXRを有効にすることを示すシーンです。詳しくは、Dynamic OpenXR Loaderを参照してください。
  • PortraitUISampleScene

    • スマートフォンを縦向きにしてUIを操作するサンプルシーンです。UIでキューブを操作できます。

機能の有効化

この機能を使用するには、以下のOpenXRのプロジェクト設定でDual Render Fusionにチェックする必要があります。
Project Settings > XR Plug-in Management > OpenXR (Androidタブ) alt text

プロジェクト設定の変更

alt text
メニューのSnapdragon Spaces > Dual Render Fusion > Configure Fusion projectを使用すると、Fusionのためのプロジェクト設定を簡単に行うことができます。

これにより、プロジェクト設定が以下のように調整されます。

Initialize XR on Startup」の無効化

  • Project Settings > XR Plug-in Management > OpenXR (Androidタブ)の「Initialize XR on Startup」を無効にします。 alt text

Base Runtimeの設定

  • Project Settings > XR Plug-In Management > OpenXR > Base Runtime > Feature settings(歯車アイコン)で、

    • Launch App On Viewerを無効にします。
    • Launch Controller on Hostを無効にします。
    • Export Headlessを無効にします。 alt text
  • Project Settings > Player > Other Settings > ConfigurationActive Input Handlingの値をbothに設定します。これにより、従来の入力システムと新しい入力システムを並行して使用することができます。

  • Project Settings > PlayerProduct NameVersionの値を調整し、末尾に-Fusionを追加します。これにより、Dual Render Fusionでビルドされたアプリは、開発中に識別しやすくなります。

  • Project Settings > Player > Other Settings > IdentificationPackage Nameの値を調整し、末尾に.fusionを追加します。

WARNING

Fusionに対応する前と対応した後のアプリをスマートフォンにインストールする場合、アプリ名の末尾に-Fusionが付くアプリと付かないアプリの2つが存在し、見分けが付きにくい可能性があります。

アプリを見分けるために、スマートフォンのホーム画面でアプリアイコンを長押ししてアプリ名の末尾まで確認することをお勧めします。

TIP

プロジェクト設定を手動で調整する場合、Product NameVersionPackage Nameを調整する必要はありません。

Active Input Handlingの変更は、ほとんどのユースケースで推奨されます。

Dual Render Fusionが正しく機能するために、その他の変更は必要です。

NOTE

これらの設定を手動で(再)適用する必要があり、Initialize XR on Startupのチェックボックスを無効にできない場合は、Assets > XR > XRGeneralSettings > Android Settingsに移動します。
alt text

ここで、Init Manager On Startを無効にします。
alt text

Project Validatorの修正を適用する

Project Settings > XR Plug-in Management > OpenXR (Androidタブ)に移動します。
Dual Render Fusion機能の歯車のアイコンをクリックして、設定を開きます。
alt text

Validate Open Sceneを有効にすると、現在のシーンに対してプロジェクトの検証を実行します。
alt text

NOTE

このステップを終えたら、Validate Open Scene無効にしてください。

この設定を有効にしたままにしておくと、自動ビルド環境で問題が発生する可能性があります。詳細は、Dual Render Fusionの設定を参照してください。

Dual Render Fusionの横にある赤い「!」をクリックし、Project Validationウィンドウを開きます。 alt text

Project Validationウィンドウには、Unityプロジェクトと現在開いているシーンの両方を更新するためのいくつかのFixオプションが表示されるので、正しいシーンをプロジェクトで開いていることを確認してください。
これらの問題は、シーンのセットアップやプロジェクトの設定によって異なる場合があります。 alt text

NOTE

Dual Render Fusionは、これらのオプションを自動的に入力します。

Dual Render Fusion機能に「!」マークが表示されているにもかかわらず、関連するオプションが表示されない場合は、Packages > Snapdragon Spaces > Runtime > Fusion > FusionFeature.FeatureValidatorsのスクリプトを再インポートして、プロジェクト検証のファイルを完全に再処理してください。 alt text

この時点で、Dual Render Fusionは正しく起動できるようになっているはずです。

新規プロジェクトの場合、シーンのHierarchyにゲームオブジェクトが追加されているはずです。
alt text

これらのゲームオブジェクトと付属のコンポーネントに関する追加情報は、コンポーネントのページにあります。

TIP

既存のSnapdragon SpacesプロジェクトにDual Render Fusion機能を追加したい開発者の方は、アプリの機能を変更することなく簡単に開始できるCompanion Controllerのセクションを参照してください。

Dual Render Fusionの設定

Dual Render Fusion機能で使用可能な設定は以下の通りです。
alt text

  1. Validate Open Scene

    • 有効にすると、Project Validationウィンドウで、現在のシーンがDual Render Fusionで動作するように正しく設定されているかどうかチェックされます。
      プロジェクトのビルドシステムにフル機能のシーン(追加のシーンなど)がない場合は、ビルドブロッカーを避けるために、この設定を無効にしてください。
  2. Simulate Fusion Device

    • 有効の場合、プレイモード時に、エディターは2つの有効なスクリーンがあるかのように動作します。
      • Display 1:スマートフォンの画面 (Dual Render Fusionのホスト画面)
      • Display 2:ARグラスの画面
    • 無効の場合、プレイモード時に、接続されたデバイスはXRコンテンツしか表示できないかのように動作します。
    • この設定には、シーンにSpaces XR Simulatorコンポーネントが必要です。詳しくはSpaces XR Simulatorコンポーネントをご覧ください。

Unityの画面レイアウト

Dual Render Fusionでは、ARグラスの画面に加えてスマートフォンの画面も使用します。 そのため、Unity Editor上でも2つの画面を確認する必要があります。

2つの画面を確認するためにGameビューのタブを2つに増やし、それぞれのTarget DisplayをDisplay 1Display 2に変更することをおすすめします。
alt text

TIP

シーンを再生する前はDisplay 2には何も表示されませんが、シーンを再生することでコンテンツが表示されるようになります。

Companion Controller(ポインター)のシミュレート

Editor内でシーンを再生しても、ポインターを動かすことは出来ません。
これは実機上で使用するジャイロセンサーを、Editor上では使えないためです。 alt text

そこで、Editor内でもポインターを動かす方法を紹介します。

  1. 以下のように、キー入力でポインターの向きを変えるスクリプトを用意します。
SimulatePointer.cs
using UnityEngine;

public class SimulatePointer : MonoBehaviour
{
[SerializeField]
private float speed = 50.0f;
private Vector2 eulerAngles = Vector2.zero;

private void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
{
eulerAngles.x -= speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.DownArrow))
{
eulerAngles.x += speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.RightArrow))
{
eulerAngles.y += speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
eulerAngles.y -= speed * Time.deltaTime;
}

transform.rotation = Quaternion.Euler(eulerAngles.x, eulerAngles.y, 0);
}
}
  1. 作成したスクリプトを、Hierarchy内のFusion Interaction > Canvas Controller > Controller Position Head Mirror > Controller Relative Positionにアタッチします。 alt text

これにより、Editor内でもシーン再生時にポインターを動かすことが出来ます。 ポインターを動かすには、矢印キーを押します。

TIP

実機上ではスマートフォンを3DoFのポインターとして扱うため、上記のEditor用のサンプルコードでもポインターの移動はせずに回転のみを行っています。

移動も行いたい場合は、AR Camera(プレイヤー)をキー入力で移動させるスクリプトを作成することをおすすめします。
そうすることで、実機と同じ「6DoFのARグラス」と「3DoFのスマートフォンのポインター」という仕様にすることが出来ます。

TIP

ポインターの回転をEditor上でもシミュレートする別の方法として、EditorCameraControllerコンポーネントを使用することも出来ます。ただその場合は、タッチパッドを押してオブジェクトを任意の位置で掴むことが難しくなります。