目次
開発環境
- Unity 2022.3.21f1
- MRTK3
- Input 3.1
- UX Components 3.1.1
- Core Definition 3.1.1
- HoloLens2
- OpenXR Plugin 1.10.0
- Meta Quest3
- MagicLeap2
- MagicLeap Setup Tool 2.0.7
- MagicLeap MRTK3 1.0.0-pre6
- MagicLeap SDK 2.0.0
概要
MetaQuestとMagicLeapはどちらもプラットフォームがAndroidのため、1つのプロジェクトだと環境が競合する。
また、MagicLeapは他のデバイスと同じMRTKを共有できない。 MagicLeapはMRTKをForkして変更を加えているため、公式のツールからではなく独自のセットアップツールから導入する必要がある。
更に現時点(2024/3)では、MagicLeapのOpenXRはMRTKでは対応できていないため、OpenXRを使わないようアナウンスされている。
If updating to Magic Leap Unity SDK 1.10.0 or 1.11.0, there may be a compile issue if your project contains the Unity OpenXR package. A workaround for this is to remove the OpenXR package from the project in this situation.
Unity SDK のメジャーアップデートに関してはこちらhttps://t.co/YDtprPWjlM
— Magic Leap Japan (@magicleapjapan) January 18, 2024
OpenXR 対応のため、従来の XR Plugin から OpenXR Plugin に変更。OpenXR 対応によりマルチプラットフォーム開発が容易となるが、注意点として MRTK にはまだ対応していないため、その場合は従来のSDKを利用する必要あり。
エディタ拡張で環境の設定を切り替える事も考えられるが、今回は「Cubeをハンドトラッキングで操作する」共有のコンテンツプロジェクトとデバイス毎のプロジェクトを分け、upmで参照する構成で環境を構築する。
MRTK3 でもOpenXRに対応したもよう
検証記事書いた yotiky.hatenablog.comMRTK3 for ML2 の OpenXR 対応に関して
— Magic Leap Japan (@magicleapjapan) March 22, 2024
MRTK3 を使った ML2 アプリ開発が、OpenXR SDK ベースで可能になりました。
新しいプロファイルを使ったものとなるので、README に従い設定をお願いします。https://t.co/9nh8tgg7YZ
コンテンツプロジェクト
- 基本的な手順は公式を参考にする
手順
- 3D(URP) Template でプロジェクトを作成
- Mixed Reality Feature Toolで以下をインストール
- MRTK3
- MRTK Core Definition 3.1.1
- MRTK Input 3.1
- MRTK UX Components 3.1.1
- MRTK3
- Project Settings > Package Manager
- 以下を追加
- OpenUPM
- https://package.openupm.com
- com.atteneder
- OpenUPM
- 以下を追加
- Package Manager
- My Registriesを選択して、以下をインストール
- glTFast
- KTX/Basis Universal Texture
- My Registriesを選択して、以下をインストール
- Project Settings > XR Plug-in Management > Project Validation
- Fix Allを実行
以降、Assets\Contents配下に作成していく
空のSceneを作成してCubeを追加
- Position Z:1
- Rotation X:30 Y:30
- Scale X:0.3 Y:0.3 Z:0.3
- ObjectManipulator
- 他プロジェクトから読み込み用のSceneLoaderを作成しておく
public class MainSceneLoader : MonoBehaviour { [SerializeField] private string sceneName = "Main"; void Start() { SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); } }
- package.json を追加
{ "name": "com.vnext.contents", "displayName": "vNext Contents", "description": "", "version": "0.0.1", "unity": "2022.3", "license": "", "author": "yotiky", "dependencies": {} }
- Assmebly Definitions を追加
- 適宜、Assembly Definition References を追加
補足
依存関係のパッケージを追加する場合
- package.jsonのdependenciesに追加する
"dependencies": { "com.cysharp.r3": "1.1.11", "org.nuget.r3" : "1.1.11" }
- 利用する側では、Project Settings > Package Manager でRegistriesが登録されていれば自動で解決してくれる
特殊フォルダー
- Resources、StreamingAssets、Pluginsなどの特殊フォルダーのアセットは、Addressablesに移行するか、シンボリックリンクで共有する必要がありそう
- UnityのAddressablesのRemoteコンテンツ運用 - ContentCatalog - Activ8 Tech Blog
- 【Unity】Package Manager の Install・Remove ボタンの隣にボタンを表示するサンプル - コガネブログ
- Assets/ フォルダーの下にパッケージを作成します。 - Unity フォーラム
- 【Unity】 AssetPostprocessorとかいう生産性爆上がりなヤツ – RiG++ - 立命館大学情報理工学部プロジェクト団体
HoloLens
- 基本的な手順は公式を参考にする
手順
- 3D(URP) Template でプロジェクトを作成
- Mixed Reality Feature Toolで以下をインストール
- MRTK3
- MRTK Core Definition 3.1.1
- MRTK Input 3.1
- MRTK UX Components 3.1.1
- Platform Support
- OpenXR Plugin 1.10.0
- MRTK3
- Project Settings > Package Manager
- 以下を追加
- OpenUPM
- https://package.openupm.com
- com.atteneder
- OpenUPM
- 以下を追加
- Package Manager
- My Registriesを選択して、以下をインストール
- glTFast
- KTX/Basis Universal Texture
- My Registriesを選択して、以下をインストール
- PlatformをUWPに変更
- Project Settings > XR Plug-in Management > Project Validation
- Fix Allを実行
Project Settings > XR Plug-in Management > OpenXR
新しくSceneを追加
- Main Cameraを削除して、MRTK XR Rigを追加
- Camera Offsetを編集
- Position Y:0
- Tracking Origin Mode : Device
- Camera Y Offset : 0
- Camera Offsetを編集
MRTKInputSimulator を追加
Project Settings > Package Manager
空のGameObjectを作成して、ContentsSceneLoaderを追加する
Build Settings
- Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
Project Settings > Player
- Company Name、Product Name、Package Nameを適宜設定
Quest
- 基本的な手順は公式や以下のサイトなどを参考に
手順
- 3D(URP) Template でプロジェクトを作成
- Mixed Reality Feature Toolで以下をインストール
- MRTK3
- MRTK Core Definition 3.1.1
- MRTK Input 3.1
- MRTK UX Components 3.1.1
- Platform Support
- OpenXR Plugin 1.10.0
- MRTK3
- Project Settings > Package Manager
- 以下を追加
- OpenUPM
- https://package.openupm.com
- com.atteneder
- OpenUPM
- 以下を追加
- Package Manager
- My Registriesを選択して、以下をインストール
- glTFast
- KTX/Basis Universal Texture
- My Registriesを選択して、以下をインストール
- PlatformをAndroidに変更
- Project Settings > XR Plug-in Management > Project Validation
- Fix Allを実行
- 新しくSceneを追加
- Main Cameraを削除して、MRTK XR Rigを追加
- Camera Offsetを編集
- Position Y:0
- Tracking Origin Mode : Device
- Camera Y Offset : 0
- Main Cameraを編集
- Output
- HDR Rendering : Off
- Camaera Settings Manager
- Opaque Display
- Clear Mode : Solid Color
- Clear Color : 0,0,0,0
- Transparent Display
- Clear Mode : Solid Color
- Clear Color : 0,0,0,0
- Opaque Display
- Output
- Camera Offsetを編集
- MRTKInputSimulator を追加
- Asset Storeから以下をMy Assetsに登録してインストール
- 「Enable Meta XR Feature Set」のダイアログが出るが必ずCancelする
- 永遠と出続ける...
Project Settings > Meta XR
- 以下の項目をignoreしてからFix Allを実行
Oculus must be added to the XR Plugin active loaders
Unity's OpenXR Plugin is not recommended when using the Oculus SDK, please use Oculus XR Plug-in instead
Project Settings > Player
- 設定が書き換わってるか確認
Project Settings > Quality
- Android のDefault Level をPerfomantに変更
【Questメモ】
— 伊藤周@おなかソフト (@warapuri) February 4, 2024
Unityプロジェクト作成時"3D (URP)" で作ったものを、Quest3 で起動させるとフレーム落ちする場合がある
理由は、AndroidのQuality設定のデフォルトが"Balanced"で、SSAOが効いているからそれに結構負荷がかかるから
一旦"Performant"で極軽量にしてフレーム落ちしないようにさせよう… pic.twitter.com/7CGUuf2Y4w- Textures
- Global Mipmap Limit : 0: Full Resolution
- Anisotropic Textures : Per Texture
- Soft Particleの設定はない(参考)
- Terrain
- Billboards Face Camera Position : チェック
Project ウィンドウから URP-Performant のURP Assetを選択
- Quality
- Anti Aliasing(MSAA) : 4x
- Lighting(参考)
- Additional Light : Per Pixel
- Per Object Limit : 1
- Quality
Project Settings > XR Plug-in Management
- OpenXRとMeta XR feature groupをチェック
- Project Settings > XR Plug-in Management > OpenXR
- Enabled Interaction Profiles : 空
- コントローラー使う時は「Oculus Touch Controller Profile」を追加
- Open XR Feature Groups > Meta XR
- Hand Tracking : チェック
- Meta Quest Support : チェック外す
- Motion Controller Model : チェック
- Enabled Interaction Profiles : 空
Project Settings > XR Plug-in Management > Project Validation
- 以下の項目を以外のFixを実行
Oculus must be added to the XR Plugin active loaders
Unity's OpenXR Plugin is not recommended when using the Oculus SDK, please use Oculus XR Plug-in instead
- Editの項目は適宜無視
Scene に空のGameObjectを作成して、OVR ManagerとOVR Passthrough Layerを追加する
- XR Plug-in Management > Project Validation に Passthrough の項目が出てくるのでFixを実行
- OVR Manager
- Target Devices : Quest3にチェック
- Quest Features > Hand Tracking Support : Controllers And Hands
- Insight Passthrough : Enable Passthroughにチェック
- OVR Passthrough Layer
- Placement : Underlay
- Opacity : 1
Project Settings > Package Manager
空のGameObjectを作成して、ContentsSceneLoaderを追加する
Build Settings
- Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
Project Settings > Player
- Company Name、Product Name、Package Nameを適宜設定
補足
コントローラーを使う場合
- Project Settings > XR Plug-in Management > OpenXR
- Enabled Interaction Profiles : Oculus Touch Controller Profile を追加する
- ハンドトラッキングでは操作できなくなる
ずっと出続ける「Enable Meta XR Feature Set」のダイアログ
Enableにすると何が変わるかと言うと以下Standaloneの設定
Enableにしてみてもさしあたり特に影響なさそうに見える
MagicLeap
- 基本的な手順は公式や以下のサイトなどを参考に
手順
Magic Leap Hubを開く
- Package Manager
- Unity のパッケージをすべてインストール
- All タブでUnity MRTK3のインストール先フォルダを開いておく
- Package Manager
3D(URP) Template でプロジェクトを作成
Asset StoreからMagic Leap Setup ToolをMy Assetsに登録してインストール
- Use OpenXR SDKダイアログ
- Use Magic Leap Sdk(deprecated)を選択
- Use OpenXR SDKダイアログ
Magic Leap > Project Setup Toolを開く
- Magic Leap SDK に最新のSDKのフォルダを設定
- Apply Allを実行
- Add Magic Leap Registryダイアログ
- Use Magic Leap Registryを選択
- Project Settings > Package Managerに追加される
- Use Magic Leap Registryを選択
- Project Settings > XR Plug-in Management > Project Validation
- 問題がないことを確認
- Assets\Settings 配下のURP関連ファイルを全て削除
- 新たにURP Asset(with Universal Renderer)を作成
- Quality
- HDR : チェックを外す
- Shadows
- Last Border : 5
- Quality
Project Settings > Graphics
- Scriptable Render Pipeline Settings に作成したURP Assetを設定
Mixed Reality Feature Toolで以下をインストール
- MRTK3
- MRTK Core Definition 3.1.1
- MRTK Input 3.1
- MRTK UX Components 3.1.1
- MRTK3
- Project Settings > Package Manager
- 以下を追加
- OpenUPM
- https://package.openupm.com
- com.atteneder
- OpenUPM
- 以下を追加
エクスプローラーでPackagesフォルダを開く
- com.magicleap.mrtk3フォルダを作成
- Magic Leap Hubで開いておいたフォルダから、com.magicleap.mrtk3-1.0.0-pre.6.tgzをコピペする
Package Manager
- add package from tarball
- 上記、com.magicleap.mrtk3-1.0.0-pre.6.tgzを追加する
- My Registriesを選択して、以下をインストール
- glTFast
- KTX/Basis Universal Texture
- add package from tarball
- Project Settings > MRTK3
- ProfileにMRTKProfile-MagicLeapを設定
- Project Settings > MRTK3 > Magic Leap Settings
- Permissions で権限を設定
- EYE_TRACKING
- HAND_TRACKING
- etc
- AndroidManifest.jsonにも追加
- Permissions で権限を設定
<manifest> <uses-permission android:name="com.magicleap.permission.EYE_TRACKING" /> <uses-permission android:name="com.magicleap.permission.HAND_TRACKING" /> </manifest>
Project Settings > XR Plug-in Management > Project Validation
- 問題ないか確認
新しくSceneを追加
- Main Cameraを削除して、MRTK XR Rig - MagicLeapを追加
- 公式には書かれてないが必要に応じて、Camera Offsetを編集
- Position Y:0
- Tracking Origin Mode : Device
- Camera Y Offset : 0
- 公式には書かれてないが必要に応じて、Camera Offsetを編集
MRTKInputSimulator を追加
Project Settings > Package Manager
空のGameObjectを作成して、ContentsSceneLoaderを追加する
Build Settings
- Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
- Project Settings > Player
- Company Name、Product Name、Package Nameを適宜設定
補足
ジオメトリシェーダやMRTKの空間メッシュのシェーダを使う場合
- XR Plug-in Management > Magic Leap Settingsで Force Multipass を有効にする必要がある
KeyBoard
プロジェクトで Hololens システム キーボードを使用している場合は、システム キーボードの呼び出しを MRTK の NonNativeKeyboard の代替機能に置き換える必要があります。