Android
Unity
VR
daydream

Daydreamアプリの審査を通過してみた

More than 1 year has passed since last update.

以前の投稿はこちら

http://qiita.com/shmyT/items/58d5014be5dfec047641


経緯

2017年6月現在、google様のVRプラットフォームであるDaydreamにアプリを公開するためには、(多分人間による)審査を通過する必要があります。Unity 5.6 beta 10のsystem barsが表示されてしまうバグで足止めを食らっておりましたが、Unity 5.6 beta 11にてバグはようやく改修されたようです。無事審査通過とアプリ公開ができました。日本語の情報がほぼ皆無だったため、追加で頂いた指摘内容と対処法を共有させて頂きます。がんばれ日本。


追加の指摘内容とその対処方法


The app does not maintain head tracking - ヘッドトラッキングができていません

ヘッドトラッキングというのは顔の角度に合わせてVR上の映像の角度が変わってくれる機能です。言うまでもなくVRの基本的な動作の一つであり、ゲーム画面も問題なく動作していたためこのコメントの真意を理解するのに大変時間がかかりました。

こちらのフォームでも話題になっているように皆様同じフィードバックに悩まされているようです。

https://forum.unity3d.com/threads/head-tracking-stops-on-splash-screen-daydream-store-rejection.459730/

問題はアプリの起動画面ででてくるUnity logoのスプラッシュスクリーンでした。スプラッシュが終了するときに首を左右に激しくふっていると一瞬画面の描画が追いつかず、画面の映像と首の角度がずれ、黒い空間が表示される現象が発生します。

https://youtu.be/fQnCpM0XUcY

動画にある通りこちらの現象はGoogle VR SDKのGVRdemoのサンプルシーンでも発生し、Unity様かgoogle様側の問題であるかと思われます。

いずれ改修されるかとは思いますが、試しに首を左右に激しくふっても画面がずれてるとユーザーにわからない方法。すなわち元々黒い背景がある画像を起動時に表示させてみることにしました。

下記のような黒背景の画像を用意し真ん中にちょこんとロゴを入れてやり、問題が発生して黒い空間が表示されても、元々背景が黒いからユーザーには区別がつかないだろうという形にしたところ、こちらの問題は指摘されなくなりました。

black-planet-surface-1920.jpg

VRのスプラッシュスクリーンの設定はFile->Build Settings->Player settings->Android->Splash Imageの下記で設定可能です。

スクリーンショット 2017-03-19 11.38.24.png

・Unity 5.6 beta 11現在、こちらを設定するとPersonal版でも起動時のUnity logoが消えてしまいます。Unity様のこれまでのポリシーとは違った動きなので、今後変更される可能性はあるかもしれません。

・Unity 5.6 beta 11現在、Splash screenのPreviewはVR向けには使えないようです。


The app does not provide feedback while loading -

もう一つのフィードバックはローディングに関するものです。ローディング時間が数秒に渡る場合、ユーザーにフリーズと思われないために何かしらの工夫をするようにとのことでした。審査のガイドラインであるDaydream App Quality Requirementsの該当部分を読みますと、

ローディング中に音を鳴らすとか、画面の色が変わるとか、なんか立体的なものを表示するとか、なんでもいいからとにかくフリーズしたと思われないようにしろ(意訳)

と書かれており、google様側も譲歩のガイドラインを定めているようです。


・Provide audio to indicate that the game has not crashed.

・Pulse the color or brightness of the screen to provide feedback that the app is still alive.

・Draw a small stereoscopic loading indicator to each eye.


https://developers.google.com/vr/distribute/daydream/performance-requirements

なのでゲームのシーンとは別にLoadingのシーンを設け、簡単なオブジェクトをクルクルと回転させておきました。

シーンの非同期ロードに関してはこちら

http://qiita.com/nemak1d_sys/items/07ad538baf83ea966eca

Audio clip周りの最適化に関してはこちらを参照しました

http://www.theappguruz.com/blog/optimize-game-sounds-in-unity


作ったアプリ

こんなアプリです。いわゆる即死系のゲームです。

自分で言うのも何ですがそれなりに楽しいので、よければお試しください。

[VR FLIGHT DASH]

https://play.google.com/store/apps/details?id=com.deercat.infiniteflight2sign

スクリーンショット 2017-02-20 20.17.07.png


まとめ

・2017年3月現在最新のUnity5.6.0beta11 + Google VR SDK for Unity v1.30を用いて作ったアプリにはSplash screenの終了時に画面描画が一瞬止まってしまう現象が発生する事があり、発生する場合"The app does not maintain head tracking"で審査落ちする。

・Google様的な審査ポリシーは"1瞬でもユーザーに違和感を感じさせないこと"が重要視されている模様。違和感があれば本質的な問題でなくても審査落ちし、逆に違和感がうまく隠せれば実装はどうあれ通過する模様。

何かのお役に立ちましたら幸いです。