初めに

Unity5.6から Cardboard がネイティブに対応されるようになりました。
GoogleVRSDK も1.5から大きく仕様が変わり、 Unity の機能を用いて VR 化するようになりました。過去バージョンにあった GvrViewer も無くなりました。
GVR1.5からは、入力や視差設定の補助をするという形になってます。

しかし、それに伴う問題が多いと感じているので、実装が変わった所を中心に現状の解決方法を紹介したいと思います。
Unity5.6.1p2 + GoogleVRSDK1.6 で試しています。
(5.6.1p2から iOS の複眼の歪みが修正されています。)
(5.6.2p1から GoogleVRSDK1.6のバグが改修されてます。)

スプラッシュ画面

縦画面で表示する方法を説明します。 Android 、 iOS 共通です。

img_splash_1

PlayerSetteing -> Other Settings -> VirtualRealitySupported を On にし、 上記のように設定すると、複眼でスプラッシュスクリーンが表示されます。

全画面が複眼のアプリならこれでも問題ないのですが、単眼->複眼に切り替えるようなアプリだと困りますよね。

そういう場合は以下のような方法で解決できます。

img_splash_2

Virtual Reality SDKs の一番上を None に設定します。 二番目に CardBorad を設定することによって単眼でスプラッシュスクリーンを表示できます。
※ Daydream は実機で試せていないです。

しかしこのままだと、 LandScape(横)の状態で、 Portant(縦)で表示されないです。 そこで縦画面で表示するには以下のように設定します。

img_splash_3

VirtualRealitySupported をいったん Off にし、

img_splash_4

Resolution and Presentation -> Default Oriention を Portrant に設定し、 VirtualRealitySupported を On にします。 ※ VirtualRealitySupported を On にすると Default Oriention を設定できなくなります。

これで縦画面でスプラッシュスクリーンが表示できます。

  • 注意点
    • iOS
      • Landscape Image が反映される
      • 縦画面で表示させる場合は、画像を反時計周りにしたものを使用する。
    • Android
      • Static Slpash Image  が表示されない。
      • Splash Screen をカスタイズせざるをえない。

単眼・複眼の切り替え

Virtual Reality SDKs の一番上を None に設定した場合は CardBorad を読み込む処理が必要になります。 UnityEngine.VRを基本的に使用します。

using UnityEngine.VR;
void Start()
{
    StartCoroutine(LoadCardBoard());
}

IEnumerator LoadCardBoard()
{
    VRSettings.LoadDeviceByName("cardboard");
    yield return null;
    VRSettings.enabled = true;
}

読み込み処理のサンプルです。デバイスの読み込みは次のフレームの頭で行われます。

VRSettings.enabled = true;    //複眼化
VRSettings.enabled = false;   //単眼化

単眼・複眼の切り替えはこれで出来ます。

Camera.main.ResetAspect();

複眼から単眼に切り替える時は、アスペクト比をリセットしないと、単眼の時、画面が横に広がって見えてしまいます。


ヘッドトラッキングの初期化

InputTracking.Recenter();

Android 、 iOS ともにこの関数で大丈夫です。

GvrCardboardHelpers.Recenter();

この関数が用意されていますが、 iOS だとうまく機能しないです。


複眼時の左上に表示されるボタンの判定

if (Input.GetKeyDown(KeyCode.Escape))
{
    //押した時の処理
}

Android のバックボタンも今までと同様にこの関数で判定が取れます。

まとめ

GvrViwer が無くなって実装方法が大きく変わりましたね。
今回紹介したのは、解決できた内容の一部です。 Android で複眼の時、 ScreenSpace の uGUI が表示できない等、まだ解決できていない内容もあります。
同じように苦労されている方の助けになれば幸いです。 issue やフォーラムを読んでみると解決することが多いです。

参考 URL