VRモードとノーマルモードの切り替え
UnityでのVR対応を作るのは非常に簡単で、PlayerSettingsのOther SettingsからVirtual Reality SupportedをONにして、SDKにCardboardなどを入れればもうVRコンテンツになる。
Unity2017.2b3からはVRではなく、XRと名称が代わり、スクリプトのパッケージ名や、PlayerSettingsの項目も、XR Settingsへと移行。
現状の最新Google VR Unity SDK v1.7ですが、Unityに入っているものはv1.6。
VRと通常コンテンツの切り替えは、基本的には。
VRSettings.enabled = !VRSettings.enabled;
(2017.2b3からはXRSettings)
とすればOK。
ただ、これで成り立つのは
・起動直後からVRコンテンツ
・ノーマルコンテンツもVR同様の横向き
という条件になると思います。
両方のコンテンツを使う場合多くは起動時にノーマルモードだと思いますので、Virtual Reality SDKsにNoneを追加し、一番上に持っていきます。
Default OrientationはVirtual Reality SupportedがONの状態では変更できないので、ここをOFFにしてからPortraitにし、再びONにします。
あとは下にある参考サイトをもとにこんな感じでできました。
ちなみにUnity2017.2b3からはVRからXRにパッケージ名やクラス名が変わってますね。
using System.Collections; using UnityEngine; using UnityEngine.VR; public class XRTest : MonoBehaviour { /// <summary> /// VRデバイス名。 /// </summary> static string DeviceCardboard = "Cardboard"; static string DeviceNone ="None"; /// <summary> /// Update. /// </summary> void Update() { // 画面タッチで切り替え if (Input.GetMouseButtonDown (0)) { ToggleXR (); } } /// <summary> /// XR切り替え。 /// </summary> void ToggleXR() { if (VRSettings.loadedDeviceName.ToLower() == XRTest.DeviceCardboard.ToLower()) { StartCoroutine(LoadDevice(XRTest.DeviceNone)); } else { StartCoroutine(LoadDevice(XRTest.DeviceCardboard)); } } /// <summary> /// VRデバイスのロード。 /// </summary> IEnumerator LoadDevice(string newDevice) { bool vrMode = newDevice != XRTest.DeviceNone; // VRの際にはここで切り替え if (vrMode) Screen.orientation = ScreenOrientation.LandscapeLeft; VRSettings.LoadDeviceByName(newDevice); yield return null; VRSettings.enabled = vrMode; // ノーマルの際はここで切り替え if (!vrMode) Screen.orientation = ScreenOrientation.Portrait; } }
参考)
Tales From The Rift | GoogleVR Cardboard: Switch between normal mode and VR mode at run-time
ギャップロ | Unity5.6からのGoogleVR SDKとの向き合い方
[…] VRモードとノーマルモードの切り替え / naochangblog […]
[…] VRモードとノーマルモードの切り替え / naochangblog […]