C#
Unity
VR
XR

【Unity】ゲームの途中でXRSettingsのOn/Offを切り替える

GoogleCardboardベースのスマホVRアプリを作っている際に、ゲーム中に普通のスマホ画面と横向きのVRモードを切り替えるという仕組みが必要になりました。
最初にキーボードを使った文字入力でユーザー情報を入力してから、VR体験のプレイを始めるとか。途中でXRSettingsを簡単に切り替える方法があったので、備忘録もかねて記しておきます。

バージョン情報

Unity 2017.3.0f3

Virtual Rearity Supportedを有効にする

Edit > Project Settings > Player Settings の中の「XR Settings」というところで、「Virtual Rearity Supported」のチェックボックスをオンにします。

vr1.PNG


(オプション)
この時もし、VRモードでない時にスマホの向きを固定したい(ジャイロセンサーによる自動画面回転を無効にしたい)場合は、「Virtual Rearity Supported」にチェックを入れる前に次の作業をします。

  • 同じくPlayer Settings の中の「Resolution and Presentation」の「Default Orientation」を変更します。
    • Portrait : 縦向き
    • Portrait Upside Down:縦向き(上下逆)
    • Landscape Right:横向き(左側面が下)
    • Landscape Left:横向き(右側面が上)
    • Auto Rotation:端末の向きに合わせて自動回転

vr2.PNG

  • 「Default Orientation」を変更してから、「Virtual Rearity Supported」のチェックボックスをオンにしてください。VRモードはDefault Orientationの設定に上書きされるようです。

切り替え用のC#スクリプトを書く

XRswitch.cs
using UnityEngine.XR;

public class XRswitch : MonoBehaviour {

    void Start(){
        XRSettings.enabled = false;
    }

    public void XRon() {
        XRSettings.enabled = true;
    }
    .
    .
    .
}

冒頭の「using UnityEngine.XR」でXR設定にアクセスできるようになり、「XRSettings.enabled = true/false」でXRsettingsを丸ごと有効化/無効化できます。
僕の場合は、void Start 内でXRsettingsを切ることでゲームが始まった直後はスマートフォン画面で文字入力やタッチパネル操作ができるようにし、VRモードにしたいタイミングで関数 XRon() を呼び出しています。

最後に

以上になります。苦戦した割には、できた時には仕組みは意外と簡単でした(笑)

結構シンプルに書いてしまったと思うので、抜けがあったり質問があったりしたらコメントをくださるとありがたいです。

参考