読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

UnityでGear VR用アプリを作るなら知っておきたいデバッグ方法

VR 3D 最適化・デバッグ Unity

当初Gear VRでデバッグする方法が分からず地獄を見ました。なので、デバッグする方法について紹介します。

Gear VRに刺さずにアプリを起動する

Gear VRアプリは対象Androidデバイスのシグネチャファイルを入れGear VRにデバイスを刺すことで起動するのですが、デバッグモードで起動することで刺さなくても起動出来るようになります。正直これが一番デバッグする上で手っ取り早そうです。

www.ozmiq.com

注意点として、ジャイロセンサーはGear VR側が持つので動作しません。なので、簡単にジャイロセンサーを回す機能を付けておくと楽が出来ます。例えば下のコードをOVRCameraRigにつけとけば、とりあえずエディタで動かせます。

(Oculus DK1やOculus DK2を接続して開発するのが一番効率が良さそうではありますが…無いものは無い。しょうが無い)

gist.github.com

参考: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

f:id:tsubaki_t1:20150503024057p:plain

 で取得したAndroidデバイスの指定のポートを開放してもらいます。*1

adb tcpip 5555

後はadb connectで対象のデバイスに接続します。

adb connect IPアドレス:ポート番号

f:id:tsubaki_t1:20150503024945p:plain

これでUSBを接続しなくともWifi経由でADBのコマンドが実行できるようになります。例えばMonitorを開くとUSB接続していなくとも内容が確認出来ます。

f:id:tsubaki_t1:20150503031855p:plain

 このままポート開けっ放しで放置すると外部からデバイスにアクセスされた場合やりたい放題されるので、使い終わったらUSB接続モードに戻しておくのが良さそうです。

adb usb

なおadb connectでwifi経由で接続している時、アプリのインストールもwifiで行うことが出来ます。ただ転送速度はusbと比較して致命的に遅いので、お勧めしません。

デバッグ用のUIを表示する

通常のアプリのようにデバッグログを左上に表示する…といった事は出来ません。そもそもVR空間に左上や右上といったスクリーン座標はありません。なので、ワールド座標に幾つかのログを入力するような形に変更してやる必要があります。

 OVRCameraRig>TrackingSpace>CenterEyeAnchorの下に配置すると常に目の前に表示されるようになるので、その辺りにWorld SpaceなCanvasのUIを置くなり、TextMeshを使用するなり。

f:id:tsubaki_t1:20150503040134p:plain

なお、この方法をメインにデバッグを進めた場合、実機でないと気づきにくい問題を見つけられるメリットがありますが、デバイスを外して付けてするとVR酔いが加速するので継続して開発できないデメリットが有ります。

またVR空間に表示する関係上、表示できる情報量に限りがあるので、その辺り注意が必要です。

 スクリプトデバッグする

実行中のプロセスにアタッチすれば普通にスクリプトデバッグが使用できます。処理が通ってるハズなのに上手く取得できない…等を確認する場合は、これを利用するのが正直一番手っ取り早いです。

tsubakit1.hateblo.jp

ただし、この機能は「アプリが動いてないとアクセス出来ない」点に注意が必要です。つまり、実機で確認するには実際にアプリを動かす必要があり、アプリを動かす手っ取り早い方法は被る事という事です。

ただコレに関しては裏ワザがあり、Gear VRデバイスの装着判定用の光センサーを指やガムテープで塞いでやると、かぶらなくても起動するようになります。

実際は開発者モードで起動しMonodevelopAndroidデバイスに接続、Gear VRへデバイスを接続といった流れになるかなと思います。

再生中のゲーム画面をPCで確認する

Gear VR SDKに同梱されているOVR Remote Monitorを使用すると、低解像度ながらGear VRの画面を確認することが出来ます。

f:id:tsubaki_t1:20150503033818p:plain

使い方は下のような感じです。

  1. Gear VRと同じネットワークにPCを配置
  2. Gear VRをデベロッパーモードにする
  3. AndroidデバイスとPCをUSBで繋ぎ、以下のコマンド
    adb shell
    echo dev_enableCapture 1 > /sdcard/.oculusprefs
  4.  OVR Remote Monitorを起動する(Tool/OVRMonitor/bin/drawinn_x86_64/OVR Monitor.app。Windowsの場合はwindows_x64/OVRMonitor_Release.exe)
  5. Wifiに端末が表示されるので、選択してConnectf:id:tsubaki_t1:20150503034046p:plain

モニターの他に、Unity Proで使えるようなプロファイラも使えます。タイムラインで見れて、ここで無駄に長いバーがあったら潰す感じで使うと、Unity 4.xでfree版を使っている場合は中々良いかなと思います。

f:id:tsubaki_t1:20150503034140p:plain

 ちなみにUnity5版のプロファイラはこんな感じです。

f:id:tsubaki_t1:20150503035941p:plain

これの使い方やチューンする際に見るべきポイントについては、次の「Gear VRアプリ最適化について」…みたいな所で書こうと思います。uGUIとGear VR連携はその次の予定。

*1:何故か何処みても5555ポートを開放してるのですが、何かあるのでしょうか。