GearVRがないGearVRコンテンツ開発まとめ。ハコスコアプリ開発ともいう #vrjam

はじめに

2015/5/3現在、ovr_mobile_sdk_0.5.1\Doc\unity.pdfのp5で書かれている通り、Unity Pro 4.6.3とUnity Free 4.6以上が推奨です。
2015/5/3現在でのUnity5の最新バージョンUnity 5.0.1p3と、Beta accessのUnity5.1.0B4はGear VR開発には問題があるようです。

GalaxyS6を使ってGearVRの実機を使わないGearVRコンテンツ開発の方法をメインにまとめます。
(=ハコスコアプリ開発)

※GearVR 2015/5/1発売、Galaxy S6/Galaxy S6 Edge 4/23発売。
しかし既に Oculus’ Mobile VR Jamは第二マイルストーン。
この差し迫った時期に、GearVRの実機がないから開発ができないという悠長なことはいっていられない

 >> Oculus’ Mobile VR Jam 2015 | ChallengePost
http://vrjam.challengepost.com/

環境

  • Windows 8.1
  • Unity 5.1 B4
  • Cardboard SDK for Unity v0.4.10

PC設定

adbコマンドのインストール

PCの開発環境(UnityやUnreal)から、GalaxyS6の端末にGearVRコンテンツをデプロイする場合は、adbコマンドをPCにインストールする必要があります。

adbコマンドは、Android SDKのplatform-toolsに含まれています。
こちらのサイトを参考にいれましょう。

 >> Android SDKのダウンロードとインストール – Android入門
http://www.javadrive.jp/android/install/index1.html

GalaxyS6設定

作ったアプリをPCからGalaxyへデプロイする場合に、GalaxyS6をデベロッパーモードを有効にしてUSBデバッグをONにする必要があります。

デベロッパーモードにする方法。端末情報のビルド番号を連打で「開発者向けオプション」を表示させる。

USBデバッグをONにする方法。「開発者向けオプション」から設定

※参考 Galaxy側の設定をしないでUnityで実行しようとしたときのエラーメッセージ

 * Make sure USB debugging has been enabled
 * Check your device, in most cases there should be a small icon in the status bar telling you if the USB connection is up.
 * If you are sure that device is attached then it might be USB driver problem, for details please check Android SDK Setup section in Unity manual.

 

GearVRコンテンツ開発

まずはUnity5.1で、単純なAndroidアプリのデプロイ手順について記載。

Unity5.0以前のVirtual Reality Supportedがないバージョンで、Oculus Mobile SDK 0.5.0を使う場合の方法はこちら

 >> Oculus Rift PC SDK, Samsung Gear VR Mobile SDK, Docs, Integrations | Oculus Developer Center
https://developer.oculus.com/documentation/#filter=mobile

Mobile Development Documentation 0.5.0のPDFを参照。

まずは単純なAndroidアプリをデプロイできるようにする

Unityでデプロイ

USBで端末を接続してBuild & Runを実行(Ctrl+B)

※以下の設定を行う

※注意 Windows8.1+Unity 5.1 B5での実行結果です。別のバージョンではエラーなどの挙動が異なる場合があります。

[Unity]初回のみ。アプリのBundle Identifierを設定

PlayerSettingのOther SettingsのIdentification項目にあるBundle Identifierを「com.Company.ProductName」から適当に変更します。

※jp.2vr.GearVRを設定しようとしたら各セグメントの先頭に数字はNGでエラーとなった
(今度からドメイン取得するときは先頭英字にしよう。。)

 ※参考 もしcom.Company.ProductNameのままや、各セグメントの先頭で数字を設定してBuildした場合

 Please set the Bundle Identifier in the Player Settings. The value must follow the convention 'com.YourCompanyName.YourProductName' and can contain alphanumeric characters and underscore.
Each segment must not start with a numeric character or underscore.

 ※2回目以降のBuild And Runで発生
おそらく前のBuild And Runで実行したプロセスが実機で動いているとNG。
いったん端末でHomeボタンを押して実行中のアプリを閉じて、再度Build And Runを行うか、Unity再起動で解決。

Unable to install APK to device. Please make sure the Android SDK is installed and is properly configured in the Editor. See the Console for more details. 

[Unity]初回のみ。Build and Run時にAndroid SDKのフォルダを選択

 

GearVRなしでGearVRコンテンツ開発

=ハコスコアプリ開発

本来であれば、Unity5.1から実装されたVirtual Reality SupportedをONにするだけで、シーンにあるMain CameraがGearVR用のSide by Sideのカメラに置き換わり、ヘッドトラッキングも有効になるはず。

詳細
待ちに待ったUnityのネイティブOculusRift対応。Unity5.1b3のVR Supportedを試してみたメモ(Pro限定) 
http://2vr.jp/2015/04/19/unity5-1-vr-supported/

 

Google Cardboard SDKで代用する

>direct link to unitypackage からCardboardSDKForUnity.unitypackageをダウンロードして、適宜必要なファイルをプロジェクトにImportする。

https://developers.google.com/cardboard/unity/download

Cardboard SDKでヘッドトラッキング

  1. CardboardSDKForUnity.unitypackageから下の絵にあるProjectビューの内容をImport
  2. CardboardHead.csをMainCameraにつければOK

これで、Build And Run(Ctrl+B)で実行すると、端末の傾きで画面が動きます。

Cardboard SDKでSide By Sideのステレオ立体視

=ハコスコDXアプリ開発

GearVRはサイドバイサイドの立体視=2つのカメラで描画負荷が2倍になります。

描画負荷をGearVRの環境に合わせて確認するために、Cardboard SDKでステレオ表示を行います。

→VR Modeで画面が真っ暗未解決。

GearVR本体で動かすためのプロジェクトの設定

TODO: GearVRが届いたときにこの設定を行う。

参考

 >> Oculus Rift PC SDK, Samsung Gear VR Mobile SDK, Docs, Integrations | Oculus Developer Center
https://developer.oculus.com/documentation/#filter=mobile

Oculus モバイル提出ガイドライン(PDF)

シグネチャーファイルの作成

Oculusシグネチャーファイル(osig)とAndroidアプリケーション署名を行います。
詳細はOculus モバイル提出ガイドライン(PDF)のp.5参照。

osigセルフサービスポータルでosig発行リクエストを行う

https://developer.oculus.com/osig/

これをやることで、アプリケーションのソースコードからデバイスのローレベルへのアクセスを可能にしているらしい。

コンテンツの実行中に、CPUやGPUのクロックレベル、クロックアップとクロックダウンをプログラムコードから制御が可能になっている。

Androidアプリケーション署名作ってUnityで設定

Unityはデジタル署名を仮で発行しているためデバイスにインストールできるらしい。

英語 >> Signing Your Applications | Android Developers http://developer.android.com/tools/publishing/app-signing.html

日本語 >> 「Androidアプリケーション署名」Google検索

Unityで設定の詳細は、Oculus モバイル提出ガイドライン(PDF)のp.5、「Androidアプリケーション署名とUnity」

AndroidManifest.xmlの設定

Oculus モバイル提出ガイドライン(PDF)のp.6、「アプリケーションマニフェストファイルの要件」を参考に設定。

その他

情報元

Oculus モバイル提出ガイドライン(PDF)のp.9、「よくある質問」

 >> Samsung Gear VR | Oculus VR Forums
https://forums.oculus.com/viewforum.php?f=62

  • Oculus Homeからアプリ起動(グラフィックの表示)は4秒以内。4秒を超える場合はロード画面を表示したり、何かしら表示を行う。
  • 起動時のロゴやライセンス、免責事項などは5秒以内、ステレオ表示、ヘッドトラッキングに対応(OnGUIで画面に張り付けずに、3D Textで空間に浮かべる)
  • OculusHomeへの復帰機能をつける。復帰時の画面効果はユーザーが不快に思わぬよう各位で工夫。
    Unity5.1のVirtual Reality Supportedに含まれる?
    多分含まれなさそうなので、過去バージョン、Ocululs Mobile SDK0.5.0のサンプルDemoシーンに含まれてそう。それっぽい実装かスクリプトを参考にする。
  • 電源状態の管理。プログラムコードからCPUとGPUのクロックレベルをそれぞれ弄れるが、アプリが60FPS維持できる最低限のクロックレベルに抑える。コンテンツを最適化してGPUとCPUのクロックレベル引上げは最終手段。
  • ゲームパッド
    Bluetoothで接続。ゲームパッドにも対応するコンテンツの場合は、明示的にわかるように通知する。快適なユーザー体験を考える。(VR内で3DTextとかで通知、表示したりすればユーザーがわかりやすそう。)
    基本GearVR本体側のタッチパッドでできるスワイプ、タップで操作可能(2本以上の指とかできるのかな?)なコンテンツを作る方がいい。
    わざわざゲームパッドを用意する必要もない、ユーザーがゲームパッドの操作に慣れていない場合は無いほうがいい。視線で操作や、視線+横タップがよさそう。
  • 戻るボタンの挙動について
    長押しはユニバーサルメニューの表示が必須。短く押したときは、コンテンツの中での戻る操作。もし特別ない場合はAndroidのアプリと同じく、1度目で確認ダイアログ、2度目でコンテンツを終了してOculus Homeへ戻る。
  • 音量ボタン
    Unity5.0以前+Oculus Mobile SDK0.5.0の場合は、Oculus Mobile SDKが提供するVR音量UIを使う。
    Unity5.1からはVirtual Reality SupportedをONにすれば大丈夫?不明。
  • 通信方法
    消費電力的な意味でWi-Fiを強く推奨。
    ログインやランキング程度ならLTEでも可

 

Unreal EngineでGearVRコンテンツを開発する方法

おかずさん @pafuhana1213 がまとめられているそうです!

UE4でGear VR開発してみる 準備編 – ぼっちプログラマのメモ
http://pafuhana1213.hatenablog.com/entry/2015/04/25/223352

Epic公式も本気

>> Unreal Engine | Samsung Gear VR Headset Prerequisites
https://docs.unrealengine.com/latest/JPN/Platforms/GearVR/index.html

 >> Unreal Engine | Samsung Gear VR Best Practices 
https://docs.unrealengine.com/latest/JPN/Platforms/GearVR/BestPractices/index.html

 >> Unreal Engine | Samsung Gear VR Debugging 
https://docs.unrealengine.com/latest/JPN/Platforms/GearVR/Debugging/index.html

謝辞

ゆなゆなさん @yunayuna64