i-school - VRアクションゲーム デバッグ環境を整える


設計


 Oculus などのデバイスに依存するゲームの場合、Unity エディター上でのデバッグが行えないため、
当然ながら Console ビューを活用した Debug.Log メソッドを表示させて処理の挙動を確認していく作業が行えません。

 そのため、Oculus の用意しているサンプルゲームでは、ゲーム空間内にデバッグ用の Canvas を設置し、
そこに Debug.Log メソッドの内容を表示させています。

 利用している Canvas はプレファブとして提供されていますので、こちらを活用して、
自分の開発しているゲーム内にもデバッグ用の Canvas の用意を行います。

 ただし、それだけですと、Unity エディターでの確認が行えなくなってしまうため、
ゲームを実行しているプラットフォームに応じて、Debug.Log メソッドの実行内容を Console ビューに表示するか、
Canvas 内に表示するかを自動的に分岐させる機能を実装していきます。


CanvasWithDebug ゲームオブジェクトを設置する


 Oculus の用意しているデバッグ用のプレファブを利用します。
下記のパスに CanvasWithDebug ゲームオブジェクトのプレファブがありますので、
こちらをヒエラルキーに配置します。

Assets/Oculus/SampleFramework/Core/DebugUI/Prefabs/CanvasWithDebug.prefab




LogSwitchManager スクリプトを作成する


 プラットフォームに合わせて、Console ビューにデバッグを表示するか、VR 空間に表示させるかを
自動的に分岐させる機能を実装します。


LogSwitchManager.cs

<= クリックすると開きます。



DebugUIManager スクリプトを作成する


 CanvasWithDebug ゲームオブジェクトにアタッチされている DebugUIBuilder クラスに命令を出して、
デバッグ内容を表示させる機能を実装します。


DebugUIManager.cs

<= クリックすると開きます。



<DebugUIBuilder クラスの各メソッドについて>


 Canvas 内の制御を行うために API が用意されています。
利用しているものを抜粋して解説します。

<Text を表示させたい場合>
  DebugUIBuilder.instance.AddLabel("Debug Start", DebugUIBuilder.DEBUG_PANE_CENTER);

 第1引数に表示させたい内容を string 型で指定します。通常の Debug.Log メソッドと同じように変数指定も可能です。
 第2引数には、Canvas 内の表示場所を指定します。この例であれば、中央位置に表示させます。



<ボタンを画面内に追加したい場合>
 DebugUIBuilder.instance.AddButton(buttonText, ClearButtonPressed);

  DebugUIBuilder.instance.AddDivider();

 AddButton メソッドを利用し、Canvas 内にボタンの準備をします。
第1引数にはボタンに表示するテキストの内容を指定します。
第2引数には、ボタンを押した際に実行するメソッドを指定します。

 AddButton メソッドだけでは準備して終了になってしまうので、
最後に必ず AddDivider メソッドを使って有効化します。

 複数の AddButton メソッドがあり、最後に AddDivider メソッドを実行すれば、
AddDivider メソッドの前に準備してあるすべての AddButton メソッドが有効になります。

 そのため、AddButton メソッドごとに AddDivider メソッドを行う必要はなく、
AddButton メソッドを書き終わったら忘れずに AddDivider メソッドを書くようにしてください。



<Canvas の表示/非表示>
 DebugUIBuilder.instance.Show();

 DebugUIBuilder.instance.Hide();

 Show メソッドで Canvas を表示、Hide メソッドで Canvas を非表示にします。


DebugManager ゲームオブジェクトを作成し、スクリプトをアタッチする


 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Create Empty を選択して
新しいゲームオブジェクトを作成します。名前を DebugManager に変更し、作成した2つのスクリプトをアタッチします。





ゲームを実行して動作を確認する


 VR とエディターの両方で起動し、デバッグのメッセージが表示されるか確認しておきます。