[追記]
Quest Proが届いたので実機で試したところ、下記手順で作成したアプリでパススルー表示ができました。
Unity2021.3.8f
Oculus XR Plugin 3.0.2
MRTK 2.8.2
で #QuestPro のパススルー動いた一昨日はアプリが落ちちゃってたんだけどビルドしなおしたら動いたな。MRTKとOculus IntegrationのIntegrateがうまくいってなかったのかも。 pic.twitter.com/ZF4oShnz4k
— とりカシュ (@torikasyu) October 29, 2022
ツイート内にあるように、Unity2021.3.8fで、プラグインはOculus XR Pluginを使用しています(not OpenXR)
最初うまくいかなかったのですが、MSの手順書にある「Integrate Oculus Intagration」を再度実行したら動作しました。
Oculus Integrationは最新のv4.6を使っています。
================================
今日は2022年10月21日です。そして実感が沸かないですが、来週28日には注文したMeta Quest Proが届くはずです。
勝手にキャンセルされる現象が多発しているようで、僕の注文分も本当に届くのかわかりませんが。。
Quest Proは僕の中ではMRデバイスの位置づけなので、パススルーで外が見えることは最重要です。さらに、HoloLens 2開発で使い慣れたMRTKを使うことで短時間でアプリを作れると期待しています。
そこで、MRTKでのパススルーの設定方法をメモしておきます。MetaによるとQuest 2向けのアプリはQuest Proでも動作するということなので、Pro向けにも使える方法のはずです。
Quest Proにそなえて #MRTK のパススルー設定を思い出しながらQuest 2で動かした。MRデバイスだからこれは必須。
自分用に設定方法をブログにまとめるかな pic.twitter.com/SxxKl8Gtpc
— とりカシュ (@torikasyu) October 21, 2022
UnityにMRTKのインストールとAndroidのビルド環境を整えたら、下記手順を行いますが、必要なのは「シーンを設定する」という項目までです。
「シーンを設定する」項目まで終えたら、MRTKのProfileをカスタマイズしていきます。
・DefalutMixedRealityConfigrationProfileをclone
・Inputタブの、DefalutMixedRealityInputSystemProfileをclone
・Input Data ProvidersのXR SDK Oculus Device Manager以下の、OculusXRSDKDeviceManagerProfileをclone
Ovr Camera Rig Prefabに指定されている「MRTK-Quest_OVRCameraRig」を探して、Assets以下にコピーして編集できる状態にして、Profileに指定する。
Assets以下にコピーして編集できる状態になったPrefabに、OVR Passthrough Layerをアタッチ。
Opacityは0.5くらいにする。
Generalの Passthrough Capability Enabledと、その下の Enable Passthroughにチェックを入れる。
Player Settingsで、Scripting Backendを「IL2CPP」、Target Architecturesを「ARM64」にします。
この状態でビルドを行うとパススルー表示ができるはずです。
できなかったらTwitterにコメントくださいw
また、動的にパススルーのon/offや透過度を切り替えるサンプルスクリプトとなります。
using Microsoft.MixedReality.Toolkit.UI; using UnityEngine; public class MyOverrayPassthrough : MonoBehaviour { OVRPassthroughLayer passthroughLayer; void Start() { var ovrCameraRig = GameObject.FindObjectOfType<OVRCameraRig>(); if (ovrCameraRig == null) { Debug.LogError("Scene does not contain an OVRCameraRig"); return; } passthroughLayer = ovrCameraRig.GetComponent<OVRPassthroughLayer>(); if (passthroughLayer == null) { Debug.LogError("OVRCameraRig does not contain an OVRPassthroughLayer component"); } } public void TogglePassthrough() { passthroughLayer.hidden = !passthroughLayer.hidden; } public void ChangeOpacity(SliderEventData data) { passthroughLayer.textureOpacity = Mathf.Clamp(data.NewValue, 0, 1f); } }