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と通常コンテンツの切り替えは、基本的には。
[unitycsharp]
VRSettings.enabled = !VRSettings.enabled;
[/unitycsharp]
(2017.2b3からはXRSettings)

とすればOK。
ただ、これで成り立つのは

・起動直後からVRコンテンツ
・ノーマルコンテンツもVR同様の横向き

という条件になると思います。

両方のコンテンツを使う場合多くは起動時にノーマルモードだと思いますので、Virtual Reality SDKsにNoneを追加し、一番上に持っていきます。
Default OrientationはVirtual Reality SupportedがONの状態では変更できないので、ここをOFFにしてからPortraitにし、再びONにします。

あとは下にある参考サイトをもとにこんな感じでできました。
ちなみにUnity2017.2b3からはVRからXRにパッケージ名やクラス名が変わってますね。

[unitycsharp]
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;
}
}
[/unitycsharp]

参考)
Tales From The Rift | GoogleVR Cardboard: Switch between normal mode and VR mode at run-time
ギャップロ | Unity5.6からのGoogleVR SDKとの向き合い方

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です