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との向き合い方

コメントを残す