当初Gear VRでデバッグする方法が分からず地獄を見ました。なので、デバッグする方法について紹介します。
Gear VRに刺さずにアプリを起動する
Gear VRアプリは対象Androidデバイスのシグネチャファイルを入れGear VRにデバイスを刺すことで起動するのですが、デバッグモードで起動することで刺さなくても起動出来るようになります。正直これが一番デバッグする上で手っ取り早そうです。
注意点として、ジャイロセンサーはGear VR側が持つので動作しません。なので、簡単にジャイロセンサーを回す機能を付けておくと楽が出来ます。例えば下のコードをOVRCameraRigにつけとけば、とりあえずエディタで動かせます。
(Oculus DK1やOculus DK2を接続して開発するのが一番効率が良さそうではありますが…無いものは無い。しょうが無い)
参考:UnityでiOSのジャイロの使い方をちゃんと説明する - Qiita
なお開発者モードで発生した問題として、Gear VRは初回接続時に必要なファイルをダウンロードするのですが、デバッグモードの場合はダウンロードしないみたいです。Gear VRを本体に接続するには、一旦デバッグモードを解除してから接続する必要があります。
Wifi経由でADBを取得する
Gear VR本体とAndroidデバイスを接続すると、PCとUSBを接続することができなくなります。そのため、ログはWifi経由で取得する必要があります。
まず下のコマンド(Macならターミナル、Windowsならコマンドプロンプト。要ADBへのPATH)を実行し端末のIPアドレスをゲットします。
adb shell ip -f inet addr show wlan0
で取得したAndroidデバイスの指定のポートを開放してもらいます。*1
adb tcpip 5555
後はadb connectで対象のデバイスに接続します。
adb connect IPアドレス:ポート番号
これでUSBを接続しなくともWifi経由でADBのコマンドが実行できるようになります。例えばMonitorを開くとUSB接続していなくとも内容が確認出来ます。
ddmsでデバッグログ直上の入力欄に tag:VrApi と入力すると、本体の現在のクロックと温度が表示されて便利です。他、app:(アプリのBundleIdentifier) や text:(マッチする文字列) も比較的使えます。 pic.twitter.com/HCnahPFu4X
— Nora (@Stereoarts) 2015, 5月 2
このままポート開けっ放しで放置すると外部からデバイスにアクセスされた場合やりたい放題されるので、使い終わったらUSB接続モードに戻しておくのが良さそうです。
adb usb
なおadb connectでwifi経由で接続している時、アプリのインストールもwifiで行うことが出来ます。ただ転送速度はusbと比較して致命的に遅いので、お勧めしません。
デバッグ用のUIを表示する
通常のアプリのようにデバッグログを左上に表示する…といった事は出来ません。そもそもVR空間に左上や右上といったスクリーン座標はありません。なので、ワールド座標に幾つかのログを入力するような形に変更してやる必要があります。
OVRCameraRig>TrackingSpace>CenterEyeAnchorの下に配置すると常に目の前に表示されるようになるので、その辺りにWorld SpaceなCanvasのUIを置くなり、TextMeshを使用するなり。
なお、この方法をメインにデバッグを進めた場合、実機でないと気づきにくい問題を見つけられるメリットがありますが、デバイスを外して付けてするとVR酔いが加速するので継続して開発できないデメリットが有ります。
またVR空間に表示する関係上、表示できる情報量に限りがあるので、その辺り注意が必要です。
スクリプトデバッグする
実行中のプロセスにアタッチすれば普通にスクリプトデバッグが使用できます。処理が通ってるハズなのに上手く取得できない…等を確認する場合は、これを利用するのが正直一番手っ取り早いです。
ただし、この機能は「アプリが動いてないとアクセス出来ない」点に注意が必要です。つまり、実機で確認するには実際にアプリを動かす必要があり、アプリを動かす手っ取り早い方法は被る事という事です。
ただコレに関しては裏ワザがあり、Gear VRデバイスの装着判定用の光センサーを指やガムテープで塞いでやると、かぶらなくても起動するようになります。
Gear VR Tips ローディング中 ガムテープの術 pic.twitter.com/NVXBwXFp0m
— GOROman (@GOROman) 2015, 5月 1
実際は開発者モードで起動しMonodevelopをAndroidデバイスに接続、Gear VRへデバイスを接続といった流れになるかなと思います。
再生中のゲーム画面をPCで確認する
Gear VR SDKに同梱されているOVR Remote Monitorを使用すると、低解像度ながらGear VRの画面を確認することが出来ます。
使い方は下のような感じです。
- Gear VRと同じネットワークにPCを配置
- Gear VRをデベロッパーモードにする
- AndroidデバイスとPCをUSBで繋ぎ、以下のコマンド
adb shell
echo dev_enableCapture 1 > /sdcard/.oculusprefs - OVR Remote Monitorを起動する(Tool/OVRMonitor/bin/drawinn_x86_64/OVR Monitor.app。Windowsの場合はwindows_x64/OVRMonitor_Release.exe)
- Wifiに端末が表示されるので、選択してConnect
モニターの他に、Unity Proで使えるようなプロファイラも使えます。タイムラインで見れて、ここで無駄に長いバーがあったら潰す感じで使うと、Unity 4.xでfree版を使っている場合は中々良いかなと思います。
ちなみにUnity5版のプロファイラはこんな感じです。
これの使い方やチューンする際に見るべきポイントについては、次の「Gear VRアプリ最適化について」…みたいな所で書こうと思います。uGUIとGear VR連携はその次の予定。
*1:何故か何処みても5555ポートを開放してるのですが、何かあるのでしょうか。