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 […]