Snapdragon Spaces V0.13.0 + MRTK3-pre.15の開発環境構築(2023年5月版)
Snapdragon Spaces(Think Reality A3)向けMRTK3環境
この記事はSnapdragon Spaces(Think Reality A3)向けにMRTK3を活用したコンテンツ開発に関する手順です。大まかな流れは以前書いた向けほぼ同じですが、2023年5月時点の各ライブラリのバージョンを組み合わせた場合のTipsなどを加えています。
Snapdragon SpacesでMRTK3を利用する手順は以下で公開されています。
基本的には上記手順に従って補足を入れながらデプロイをしてみたいと思います。
開発環境
今回は以下のバージョンで構成しています。
- Snapdragon Spaces v0.13.0 (SnapdragonSpaces SDK本体)
- com.qualcomm.qcht.unity.interactions 4.0.0-pre.11 (SnapdragonSpaces ハンドトラッキング)
- Mixed Reality Toolkit 3 Pre.15
- Mixed Reality OpenXr Plugin 1.7.2(MRTK3でハンドトラッキングを使う場合に必要)
- Mixed Reality Feature Tool v1.0.2209.0 Preview(MRTK3セットアップ用)
- Unity Hub 3.3.0
- Unity 2021.3.16f1
- Android Build Support一式
- packages
- OpenXR Plugin
- Input System
- XR Management
- XR Interaction Toolkit
Unityプロジェクト作成~パッケージ導入
空プロジェクトの作成
Unity Hubを起動し、新しいプロジェクトを作成します。
設定値は以下の通りです。バージョンの設定に注意してください。
- Editor Version : 2021.3.16f1
- template : 3D
- Project name : 任意
- Location : 任意
空プロジェクトの作成が完了しUnity Editorが立ち上がったら一度終了します。
次に各パッケージを導入します。
Mixed Reality Feature ToolによるMRTK3の導入
一番初めにツールの環境設定の確認を行います。MRTK3は現在public Previewなので、これらのパッケージが扱えるようにツールの設定変更が必要です。まずはMixed Reality Feature Toolを起動し、歯車のアイコンから設定を開きます。
次に、設定タブ[Feature]を選択し、項目の中の[Show preview releases]にチェックがあることを確認します。チェックがされていれば、[OK]をクリックして設定を閉じます。
タイトルに戻ってStartボタンを押します。パッケージを設定するプロジェクトフォルダの選択する画面になりますので先ほど作った[空のUnityプロジェクト]を指定します。
次に、実際に導入するパッケージを選択してきます。 Select ALL を押してすべてのコンポーネントを導入 または最小構成でセットアップします。
選択後、[Get Features]を押すとダウンロードが始まり依存関係のチェックが行われます。
インポートする機能とその依存関係から追加で設定が必要なパッケージの候補が表示されます。選択したコンポーネントが依存するコンポーネントの内、未選択のものがあれば候補に表示されます。すべて選択して次へ進みます。
最後に変更後のパッケージリスト(Packages/manifest.json)と今回インポートするパッケージのリストが表示されます。Approveを押して変更を確定しましょう。なお、Mixed Reality Feature Toolではこの操作を行うとPackages内に変更前のmanifest.jsonをバックアップするようになっています。万が一動作に不具合を感じた場合でも元に戻すことが可能です(逆にGithubなどを使っている場合はバックアップはゴミになるので注意してください)
問題がなければ次のような画面になるので終了します。これでMixed Reality Feature Toolでの設定は完了です。この時点でUnity Editorを開いたままにしていると自動的にインポートの作業が実施されます。
次にプロジェクトの初期設定を行っていきます。プロジェクトの初期設定としては以下の手順の実施が必要です。
Snapdragon Spaces for Unityの導入
Snapdragon Spaces for Unityはサイトからダウンロード可能です。
ダウンロードサイトへ行くとUnity向けとUnreal向けがダウンロードできます。Unity用のものをダウンロードしてください。
ダウンロードしたファイルはサンプル含めたZipファイルになっています。まずはこのzipファイルを展開します。
D:.
│ Controller_Android_Project0_13_0.zip
│ NOTICE.txt
│ README.txt
│ SnapdragonSpacesServices_0_13_0.apk
│
└─Unity Package
│ .DS_Store
│ com.qualcomm.qcht.unity.interactions-4.0.0-pre.11.tgz
│ SnapdragonSpaces_Package_0_13_0.tgz
│ SnapdragonSpaces_Unity_Samples_0_13_0.apk
│
└─package
...
次にエクスプローラー等で[空のUnityプロジェクトフォルダ]\Packagesを開きます。新規フォルダとして[SnapdragonSpaces]を作成しこの中に以下のファイルを格納します。
- com.qualcomm.qcht.unity.interactions-4.0.0-pre.11.tgz
- SnapdragonSpaces_Package_0_13_0.tgz
これらのパッケージは後程Unity Editorからプロジェクトへインポートします。
プロジェクト初回起動時の注意点
Mixed Reality Feature Toolで必要なパッケージをインポートすると初回起動時にはいくつかのメッセージダイアログが表示されます。
まず最初にInput Sysytemについての警告が表示されます。Unityではネイティブデバイス用の古いInput Systemがデフォルトとなっています。MRTK3はUnityの新しい方のInput Systemを利用するようになっているため、プロジェクトの設定を変更するか確認を求められる形になります。
ここでは[Yes]を選択し次へ進めます。
一度Unity Editorが再起動され引き続きパッケージのインポートが進みます。そしてEditorが開くと次に以下のような警告が表示されます。
これはXRIに関係するもので、MRTK3内で利用しているXRIの一部が非推奨のメソッドを含んでいるという警告です。このメッセージはこの非推奨機能を自動的に修復を試みるかどうかの確認ダイアログになっています。MRTK3内の設定が勝手に書き換わるのはまずいので、ここでは[No Thanks]を選択します。すると、再度Unity Editorが再起動され、てパッケージの導入が完了します。
必要パッケージのインポート
次に、Snapdragon Spaces for Unityのインポートを行います。
Snapdragon Spaces for Unityのインポート
インポートは[Window]-[Package Manager]を選択しPackage Managerウィンドウを開きます。左上の[+]ボタンを押して、[Add package from taball...]を選択し[空のUnityプロジェクトフォルダ]\Packages\SnapdragonSpaces内に先ほどコピーした2つのパッケージをインポートします。
インポート後は一度Editorを再起動します。
TextMesh Proのインポート
次にTextMesh Proのリソースをインポートします。MRTK3のテキストはTextMesh Proを利用しているためインポートが必要です。
なお、インポートせずにMRTK3のコンポーネントを使うとTextMesh Proを利用する段階で以下のようなダイアログが表示されてインポートを即されます。どちらにせよ必ず必要なのでインポートを忘れずに。
MRTK3 と Snapsragon Spacesの設定(共通)
コンテンツの作成に入る前に設定の調整を実施します。この手順はSnapdragon SpacesのControllerやハンドトラッキングの利用有無で設定が変わります。まずは共通で実施が必要な手順から進めます。
OpenXRの設定
[Edit]-[Project Settings]を開き[XR Plug-in Management]を選択します。タブがAndoroidになっていることを確認の上OpenXRを有効化します。サブ項目として[Snapdragon Spaces feature group]が追加されるのでここにもチェックをします。この際設定に問題があればエラーや警告が出ます(例えば、OpenXRはARM64にしか対応していないため、ビルド時の設定でArm64を対象にビルドする必要があるなど)
修正については[Edit]-[Project Settings]を開き[XR Plug-in Management]-[Project Validation]の項目を選択し[Fix ALL]を何度か押すことである程度自動的に問題を解消してくれます。ただし、画像のように3つほどは警告が残るはずですが、無視しても問題ありません。
MRTK3のプロファイルの設定
次にMRTK3のプロファイル設定を行います。この設定も先ほどのValidationツールを使用することでデフォルトのプロファイルが適用済みになりますが、Snapdragon Spacesと組み合わせる場合は、設定変更が必要になる場合があるので新規作成と設定を行います。
空のMRTK Profileの作成
以下の手順で作成します。
- [Project]パネルを選択
- Assets以下の任意のフォルダを選択
- ポップアップメニューで[Create]-[MRTK]-[MRTKProfile]を選択
空のMRTKProfileを設定する
次に[Edit]-[Project Settings...]を選択しウィンドウを開きます。[MRTK3]を選び、Android用のProfileとして先ほど作成した[Assets\MRTKProfile.asset]を設定します。変更は不要ですが、以下のチェックが外れていることを確認してください。
- MRTK Hands Aggregator Subsystem
- Subsystem for Hand Synthesis
Unity Edtitorでのデバック時のための設定
[Windows,Mac,Linux Settings(コンピュータのアイコン)]タブのMRTK3プロファイル設定しなければデバッグ実行時にInput Simulationが動作しないので注意
[Edit]-[Project Settings]を開き[MRTK3]を選択します。次に[Windows,Mac,Linux Settings(コンピュータのアイコン)]タブを確認してください。初期状態ではProfileの設定がないためエラーになっている場合は設定が必要です。まずはprofile右のボタンから検索ウィンドウを開きデフォルトのprofileを設定しましょう。ウィンドウの検索結果に[MRTKProfile]が含まれていない場合はPackagesの中がフィルターで除外されているので、右の目玉アイコンをクリックして表示させてください。
補足
なお、MRTKProfileやsubsystemのプロファイルはProjectタブの中で右クリックでメニューを表示し[Create]-[MRTK]-[MRTKProfile]を選択すると新規に作成することができます。
MRTK3が使える空シーンを作成する(共通)
次にSampleScene内を修正し、MRTK3が利用できるようにいくつかのコンポーネントを設定します。
シーンのカメラを削除
最初にシーンの中にあるMain Cameraを削除します。次の手順で行うprefabの中にカメラの設定などが含まれているため既存のMain Cameraが不要なためです。
MRTK XR Rigの追加
MRTK3ではカメラやコントローラ等をPrefabで提供しています。名前がMRTK XR Rigとなっていますが、これはUnity XR Interaction Toolkit(XRI)でも同じ実装方法です。XRIではXR Rigとなっています。Prefabは[Project]タブの検索項目に[MRTK XR Rig]と入力すると候補に出てきます。**この時、検索対象を[all]か[In Packages]のいずれかに設定して検索を行ってください。**検索結果に表示されたPrefabをHierarchyにコピーしてください。
展開すると以下のようにカメラ、コントローラ用のオブジェクトが設定されているのがわかります。
以上で、Snapdragon SpacesとMRTK3で開発を進めるための共通的な実装の準備が整いました。
次は入力方法としてSnapdragon Spacesコントローラまたはハンドトラッキングを使う場合の設定を進めます。そのあとようやくコンテンツの作成です。
SnapdragonSpacesコントローラを使う場合の環境構築
Snapdragon Spacesは演算装置であるスマホを3DOFコントローラ化することができます。MRTK3でも3Dofコントローラとして操作することが可能です。
Snapdragon Spaces for Unityのサンプルのインポート(一部)
Snapdragon Spacesを利用するためには現段階ではController系を自分で用意する必要があります。このためこれに必要な情報をSamplesから取得します。[Windows]-[Package Manager]を選択し[Package Manager]を起動して[Snapdragon Spaces]を選択し、サンプルをインポートします。
インポートするとエラーが1件残ります。Snapdragon Spacesのサンプルの中にネイティブ実装があるようです。エラーを解消するために[Project Settings]でunsafeコードを許可しましょう。
OpenXRの設定(カスタムコントローラを使用)
[Edit]-[Project Settings]を開き[XR Plug-in Management]-[OpenXR]を選択します。[Interaction Profile]で以下の2つを追加します。
- Microsoft Windows Mixed Reality Controller Profile
- Oculus Touch Controller Profile
シーンの設定
Snapdragon SpacesではMRTKが用意しているモーションコントローラやGazeを利用することができません。そのためSnapdragon Spacesのサンプルから
- MRTK RightHand Controller
- MRTK LeftHand Controller
- MRTK Gaze Controller
次に[Device Pointer]を追加します。[Device Pointer]はサンプルの中の以下の場所にprefabで用意されています。これをシーン直下に追加します。
追加後、該当のオブジェクトを選択し[Inspector]タブの中から[XR Interactor Line Visual]-[Line Width]を0.005に変更します。
ハンドトラッキングを使う場合の環境構築
ハンドトラッキングはMRTK3の機能をそのまま使う形になります。
MRTKHandsAggregatorConfigの作成と設定
Snapdragon SpacesのハンドトラッキングはMRTK3をそのまま利用します。このためMRTK3のProfile設定を調整するだけで使用できます。
まずは、HandsAggregatorSubsystem用のProfile設定を作成しSnapdragon Spaces用に調整します。
以下の手順で作成します。
- [Project]パネルを選択
- Assets以下の任意のフォルダを選択
- ポップアップメニューで[Create]-[MRTK]-[MRTKProfile]を選択
追加されたProfileを選択し、[Inspector]パネルから[Pinch Closed Threshold]の値を0.45に変更します。
MRTKProfileを設定する
次に[Edit]-[Project Settings...]を選択しウィンドウを開きます。[MRTK3]を選び、Android用のProfileとして先ほど作成した[Assets\MRTKProfile.asset]を設定します。変更は不要ですが、以下の項目をチェックします。
- MRTK Hands Aggregator Subsystem
- Subsystem for OpenXR Hands API
[MRTK Hands Aggregator Subsystem]を選択し[Subsytem Details]の[Configuration Asset]に先ほど作成した[MRTKHandsAggregatorConfig]を設定します。
OpenXRの設定(ハンドトラッキングをを使用)
[Edit]-[Project Settings]を開き[XR Plug-in Management]-[OpenXR]を選択します。
以下の設定を確認してください
- [Interaction Profile]には何も設定しない
- Base Runtimeにチェック
- Hand Tracking(SnapdragonSpaces用)にチェック
- Hand Tracking(Microsoft OpenXR Plugin用)にチェック
簡単なコンテンツの作成(おまけ)
次に簡単なコンテンツを追加していきます。MRTK3には依然と同様ButtonなどのUX部品が提供されているのでこれを利用してコンテンツを作ってみましょう。
まずは、先ほどと同様に[Project]タブの検索項目で[PressableButton_128x32mm_TextOnly]入力しHierarchyに追加します。positionは(0.1,0,1)に設定します。
Buttonのテキスト変更などはPublic Previewの段階では階層をたどってテキストTextMesh Proコンポーネントを直接変更する必要があります。簡単にButton等の文字列に変更しておきましょう。
次にボタンを押したときに反応がわかるようにテキストを追加します。[Project]タブからSlateを検索しHierarchyにコピーします。positionは(-0.2,0,1)に設定します。
そしてSlateの下にTextを追加します。[Rect Transform]の[Scale]を(0.01,0.01,0.01)、[Position]を(0,0,-0.01)に設定します。また[Font Size]を25、[Text]を"Button State"に変更します。
最後にボタンを押したらテキストが変わる実装を加えます。[Hierarchy]の中から[PressableButton_128x32mm_TextOnly]を選択します。[Inspector]タブから[PressableButton]コンポーネントの中の[On Clicked()]のイベントを追加します。
追加したイベントのオブジェクトに先ほど追加した[Text]を設定し、[Function]に[TextMesh Pro]-[string text]を選択します。値は"Button Clicked"にします。
デバッグ実行し、ボタンをクリックするとSlate内のテキストが変化します。
デプロイ
デバッグ実行で問題なく動作していたら、デプロイしてみましょう。Unityでビルドを実行しAPKを作成してインストールします。
参考リンク
- MRTK3 Setup Guide - Snapdragon Spaces
- Github - Mixed Reality Toolkit 3
- MTRK3ドキュメント
- MRTK3 Tutorial : "Zappy's Playground"
- Mixed Reality Dev Days 2022
- 再生リスト(Youtube)
-
Introducing MRTK3 – Shaping the future of the MR Developer Experience.
→過去のMRTKの取組みから振返り、MRTK3がどういったコンセプトで今回作られたのか -
Getting started with your first MRTK3 project
→MRTK3動かしてみようぜ -
MRTK3 Interaction building blocks
→MRTK3の入力系についての設計や構造 -
Building Rich UI for MR in MRTK3
→MRTK3の素敵なUIをどう構築しているか -
Working with Dynamic Data and Theming in MRTK3
→データバインディングとテーマ制御について -
Deploy Everywhere with OpenXR and MRTK3
→MRTK3のOpenXR対応で色々デバイスで動く話
Discussion