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と通常コンテンツの切り替えは、基本的には。

1
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にパッケージ名やクラス名が変わってますね。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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モードとノーマルモードの切り替え” への2件のフィードバック

  1. […] VRモードとノーマルモードの切り替え / naochangblog […]

  2. […] VRモードとノーマルモードの切り替え / naochangblog […]

【Unity】ゲームの途中でXRSettingsのOn/Offを切り替える | IT技術情報局 へ返信する コメントをキャンセル

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