経緯
ビルトインのVRプラグインが非推奨になり、代わりにXR Plugin Managementが推奨されるようになりました。
そこで以下のリポジトリからXR Plugin Managementに対応したCardBoardプラグインを導入しました。
https://github.com/googlevr/cardboard-xr-plugin
Initialize XR on Startupの項目にチェックを入れてビルドしたところ、VRモードで起動することに成功しています。
やりたいこと
アプリ内でVRモードと通常モードの切り替えを行いたいです。
今までのビルトインVRでは以下のコードでVRモードの切り替えを行っていました。
// VR有効化 XRSettings.LoadDeviceByName("cardboard"); XRSettings.enabled = true;
// VR無効化 XRSettings.LoadDeviceByName("");
しかしこのコードはXR Plugin Management版では動作しませんでした。
XRSettingsは未使用になったのかと思い実機でログを確認してみたところ、
XRSettings.enabled : true XRSettings.loadedDeviceName : Display
となっていました。
XR Plugin ManagementでInitialize XR on Startupの項目のチェックを外して起動すると、
XRSettings.enabled : false XRSettings.loadedDeviceName : ""
と値が変わったので、XRSettingsが使われなくなったわけではない? ように見えます。
まとめ
以上、XR Plugin Managementを利用したVRアプリでVRモードと通常モードを切り替えたい。という質問になります。
ヒントや予想だけでも頂けると幸いです。
よろしくお願い致します。
追記
モードの切り替えができたので方法を記しておきます。
// AssemblyDefinitionが分かれている場合はUnity.XR.Managementアセンブリを参照に加えるとusingできます。 using UnityEngine.XR.Management;
VR有効化
var manager = XRGeneralSettings.Instance.Manager; // 旧バージョンと違って画面の回転は自動で行わないので自前で行う必要があります。 // 画面の回転が完了する前にVRモードを始めてしまうと表示がおかしくなるので回転完了を待機しています。 Screen.orientation = ScreenOrientation.LandscapeLeft; while (Screen.orientation != ScreenOrientation.LandscapeLeft) { yield return null; } // manager.DeinitializeLoaderを呼んでから再度InitializeLoaderを呼ぶとAndroidでクラッシュします。 // そのため一度InitializeLoaderを呼び出したらDeinitializeLoaderもInitializeLoaderも呼ばないようにします。 if (!manager.isInitializationComplete) { yield return manager.InitializeLoader(); } manager.StartSubsystems();
VR無効化
// VRモードを終了する際は特に特殊な設定は必要ありません。 // VR開始時に書きましたがDeinitializeLoaderを呼ばないようにだけ注意します。 var manager = XRGeneralSettings.Instance.Manager; Screen.orientation = ScreenOrientation.Portrait; manager.StopSubsystems();
回答1件
あなたの回答
tips
プレビュー