Open8

Unity 6 で Meta Quest 向けマルチプレイ対応 MR プロジェクトをセットアップする

liveasnotesliveasnotes

概要
セットアップ

  1. Unity6でVR(Core)テンプレートから新規プロジェクトを作成
  2. Android に Switch Platform
  3. Git をWindowsにインストール
  4. Mirror, ParrelSync, XR Hands を Unity プロジェクトにインポート
  5. XR Interaction Toolkit の Hand Interaction Demo サンプルをインポート
  6. XR Hands の Gestures サンプルをインポート
  7. Meta XR All-in-One SDK をインストール
  8. Project Settings > Meta XR | Project Setup Tool で Fix All, Apply All
    以下が残る

    It's not recommended to install Oculus XR Plugin and OpenXR Plugin at the same time, which may introduce unintentional conflicts.\nClick 'Edit' to open the Package Manager to uninstall one of the plugins. OpenXR Plugin is the recommended plugin to use.

  9. XR Plug-in Management で OpenXR をアンチェック、Oculus をチェック
  10. Package Manager で

動作確認

  1. ParrelSync > ClonesManager > Create new Clone → Open in new editor
  2. Mirror/Examples/AutoLANClientControllerをオリジナルのプロジェクトとclone_0のプロジェクトで開いて接続テスト(※要InputHandling:Both; 動作テストしたら戻す)
liveasnotesliveasnotes

Launch project via Univesal 3D
Switch Platform to android
install Meta XR All-in-One SDK, Fix All & Apply All at Project Setup Tool
install Oculus XR Plugin
enable Oculus in XR Plug-in Management
set Target Devices in XR Plug-in Management > Oculus
install XR Interaction Toolkit
import sample: Starter Assets
import sample: Hands Interaction Demo
install XR Hands
import sample: Gestures
Fix All at Project Validation


import Mirror (with json related package dependencies)
install package ParrelSync with git url https://github.com/VeriorPies/ParrelSync.git?path=/ParrelSync


Building Block
Real Hands (not Virtual Hands)
Occulusion (requires Graphics API: Vulkan; Target Device: Quest 3 only)

Environment Depth could not be retrieved! Please ensure the following:

When running over Link, the spatial data feature needs to be enabled in the Meta Quest Link app.
 (Settings > Beta > Spatial Data over Meta Quest Link).

Check the Project Setup Tool for any project related issues.
 (Oculus > Tools > Project Setup Tool

You are using a Quest 3 or newer device.
UnityEngine.Debug:LogError (object)
Meta.XR.EnvironmentDepth.EnvironmentDepthManager:Awake () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/EnvironmentDepth/EnvironmentDepthManager.cs:122)

Environment Depth is not supported. Please check EnvironmentDepthManager.IsSupported before enabling EnvironmentDepthManager.
Open 'Oculus -> Tools -> Project Setup Tool' to see requirements.

UnityEngine.Debug:LogError (object)
Meta.XR.EnvironmentDepth.EnvironmentDepthManager:OnEnable () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/EnvironmentDepth/EnvironmentDepthManager.cs:150)

liveasnotesliveasnotes

画面が表示されない

Your project uses a scriptable render pipeline. You can use Camera.stereoTargetEye only with the built-in renderer.
UnityEngine.Camera:set_stereoTargetEye (UnityEngine.StereoTargetEyeMask)
OVRCameraRig:EnsureGameObjectIntegrity () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/OVRCameraRig.cs:609)
OVRCameraRig:Awake () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/OVRCameraRig.cs:196)
Your project uses a scriptable render pipeline. You can use Camera.stereoTargetEye only with the built-in renderer.
UnityEngine.Camera:set_stereoTargetEye (UnityEngine.StereoTargetEyeMask)
OVRCameraRig:EnsureGameObjectIntegrity () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/OVRCameraRig.cs:610)
OVRCameraRig:Awake () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/OVRCameraRig.cs:196)
Your project uses a scriptable render pipeline. You can use Camera.stereoTargetEye only with the built-in renderer.
UnityEngine.Camera:set_stereoTargetEye (UnityEngine.StereoTargetEyeMask)
OVRCameraRig:EnsureGameObjectIntegrity () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/OVRCameraRig.cs:611)
OVRCameraRig:Awake () (at ./Library/PackageCache/com.meta.xr.sdk.core@38988e6359aa/Scripts/OVRCameraRig.cs:196)


V69 の Meta XR SDK だとハードコートされてるので、URPではできない?
BiRPで作り直す

liveasnotesliveasnotes

UnityでBiRPのテンプレ(プレーンな3D)を開く
Meta XR All-in-One SDKを入れる
Android に switch platform
meta xr interaction sdk の sampleをpackage managerのsampleから入れる
OpenXR Pluginでセットアップ
Depth APIはOculusXRPluginに依存してる(OpenXR対応待ち)なので使えない

liveasnotesliveasnotes

URPで再トライ

Unity 6000.0.26f1 でUniversal 3D (URP) で新規プロジェクト作成
AndroidにSwitch Platform
Active Input HandlingをBothからInput System Packageに
Package ManagerでMeta XR All-in-One SDKを検索・インストール
Package ManagerでMeta XR Interaction SDKを検索,そのSamplesからExamplScenesをインポート


Project Settings/Meta XR (Project Setup Tool)のRecommended ItemsをApply All
Project Settings/Meta XR (Project Setup Tool)のOutstanding IssuesのAndroid API Levelの項目をFix
Package ManagerでOculus XR Plugin,XR Interaction Toolkit(XR Plug-in Managementも自動で入る)をインストール



Fix All, Apply All

Project Settings/XR Plug-in ManagementでWindowsのPlug-in ProvidersのOculusにチェックを入れる
Project Settings/XR Plug-in Management/Oculusで,Target DeviceにQuest 3を追加する

Assets/Samples/Meta XR Interaction ​SDK/69.0.2/Example Scenes/HandGrabUseExamples.unityをQuest Linkで開く

Fix All, Apply Allする

対象シーンをビルド対象に追加してビルドする(結果:ビルドも実行もできた)

Package ManagerでXR Interaction ToolkitのSamplesからStarter Assetsを入れる
※XR HandsはOculusXRPluginに対応していない.面倒なので入れない

Assets/Samples/XR Interaction Toolkit/3.0.6/Starter Assets/DemoScene.unityをQuest Linkでテスト
特に問題なく動かせるので,そのままビルドも試す(いけた)

次にDemoScene.unityとHandGrabUseExamples.unityをそのまま混合させたシーンをテストする
QuestLinkでも実機ビルドでも動作した(ただし,XRIのコントローラーの向きは,OculusXRPluginだと変わる)
※警告は出る

liveasnotesliveasnotes


Quality > Render Scaleを0.8→1
uGUIのジャギーが気になって操作してみたけど,特に見た目は変化しなかった

liveasnotesliveasnotes

Mirrorをインストール
プロジェクトのバックアップをとる
MirrorのexamplesVRをDLして別プロジェクトで起動する
MirrorExamplesVRフォルダを自分のプロジェクトにD&Dする
API更新のダイアログが出るので適用しておく
Prefab内にMissingがあるとの警告が出る

Assets/MirrorExamplesVR/LeftHand.prefabとRightHand.prefabを開くとコントローラーのモデルが参照切れになっている
ExampleVRのほう:

自分のプロジェクトのほう:

ExampleVRのほうのプロジェクトでモデルを選択してインスペクタからモデルをselectすると,Assets/Samples/XR Interaction Toolkit/2.3.3/Starter Assets/Models/XRControllerLeftとXRControllerRightがpingされる.
自分のプロジェクトで(すでにインポート済みの)Assets/Samples/XR Interaction Toolkit/3.0.8/Starter Assets/Prefabs/Controllers/XR Controller LeftとXR Controller Rightを代わりに使う(場所・名前が変わっている)
あとMissingになっているPrefabは消しておく

左右両方編集して,逐次更新は保存する

initialize converters, convert assets

筋が悪そうだったので中断

liveasnotesliveasnotes

ExampleVRは削除


Assets/Mirror/Examples/AutoLANClientController/MirrorAutoLANClientControllerからNetworkDiscoveryオブジェクトだけコピーしてくる+そのオブジェクトにCanvasHUDコンポーネントを追加する