>   >  Unityでつくるインタラクティブコンテンツ:第11回:デバッグと設定ファイル
第11回:デバッグと設定ファイル

第11回:デバッグと設定ファイル

今回は、コンテンツ開発の過程では欠かせないデバッグと、設定ファイルの記述法について紹介します。

TEXT_高田稔則 / Toshinori Takata(Codelight
EDIT_小村仁美 / Hitomi Komura(CGWORLD)

こんにちは、高田です。今回は主にデバッグやコンテンツの設定の話をします。プログラムの制作過程においては、期待通りに動かない場合が必ず出てきます。プログラムのミス、インスペクタでの値の設定ミス、勘違いなどなどその理由は様々ですが、それをできるだけ早く見つけ、修正することが重要です。

今回は、下記の4つのトピックに分けて解説していきます。
1.printfデバッグ:Debug.Log()
2.デバッガーを使うデバッグ
3.Debugを使った視覚的なデバッグ:Debug.DrawRay()
4.外部設定ファイル

<1>printfデバッグ:Debug.Log()

デバッグの目的で最も多いのは、あるタイミングで変数がどんな値になっているかを確認したい場合だと思います。簡単なのはDebug.Log()を使う方法で、スクリプト内の値を確認したい場所に以下のように書きます。

Debug.Log(message); //messageは出力したい文字列

この方法は古くから使われていて、「printfデバッグ」とも呼ばれます。名前の由来はC言語で値を表示するときに次のように書くことからです。ほぼどんなときにも使える万能な方法です。

printf("%s\n", message);

以下のようにスクリプトに書くと、Updateが呼び出されるたびにそのときのフレーム番号がEditorのConsoleに表示されます。

void Update()
{
    Debug.Log(Time.frameCount); 
}

このスクリプトを、以下のようにオプション指定なしでビルドして実行してみます。

Unityは、実行するとDebug.Log()などの出力をテキストファイルにログとして書き出してくれます。適当に実行を止めて確認してみましょう。

デフォルトでは、Unityのログは下記のディレクトリに出力されます。
C:¥Users¥[ユーザ名]¥AppData¥LocalLow¥[Company Name]¥[Product Name]

AppDataフォルダはデフォルトではエクスプローラに表示されないため、エクスプローラの[表示オプション→隠しファイル]のチェックを入れてください。同時に[ファイル名拡張子]のチェックも入れておくことをオススメします。

[Company Name]と[Product Name]はUnityエディタのProject Settingsで指定したパラメータです。


Unity 2019では、「Player.log」という名前でログが保存されます。一世代前のログは「Player-prev.log」として残ります。Unity 2018の場合は「output_log.txt」という名前で保存されます。Player.logの内容は、次のようになっていると思います。


"1", "2", "3"と表示されている部分が先ほど書いたUpdate()のUnity.Log()で表示された部分です。

次に、ビルドオプションに「Development Build」を指定して実行してみます。

Prev.logの内容は以下のように変化します。


ビルドオプションなしのログと比べてみると、"1"を表示したDebug.log()が書かれているファイル名と行番号も表示してくれるようになっています。DebugSample.csの13行目で"1"を表示したことがわかります。

次に、意図的にエラーを起こしてみます。Development Buildを指定して実行すると、エラーが発生した場合、Development Consoleにエラーメッセージが表示されるようになります。このメッセージは前述したPlayer.logに残るので、ランニングテスト中はDevelopment Buildを指定しておくと良いでしょう。


必要な部分にDebug.Log()を書くだけでかなりの情報を収集することができるのですが、この方法ではDebug.Log()を追加するごとにビルドをし直す必要があります。ここでデバッガーを使うと、もう少し手軽に値を確認することができます。

<2>デバッガーを使うデバッグ

Unityでは、インストール時にVisual Studio用のデバッグプラグインがインストールされるため、Unityエディタからスクリプトをダブルクリックして開くだけで、Visual Studioの強力なデバッグ機能を利用できるようになっています。Visual Studioの「Unityにアタッチ」を押すとUnityエディタに接続され、デバッガーが利用可能になります。


スクリプトの行番号の左側をクリックすると赤い丸が表示されます。これは「ブレークポイント」と呼ばれ、スクリプトの実行を止める目印になります。


UnityでPlayするとブレークポイントで実行が止まります。ステップオーバー(F10)を押すと、1行ずつスクリプトが実行され、それぞれの変数の内容を確認することができます。


デバッガーはビルドしたプログラムに対しても有効です。ビルドしたプログラムの動作確認を行うときにUnityエディタで実行すると不具合が再現できない、しにくい場合があります。そのようなときは、UnityエディタのConsoleの出力にビルドしたプログラムのログを表示させることができます。

ここで、例としてボタンを押すとDebug.Log()に"CLICK"と表示されるプログラムを用意しました。Editor上ではCLICKと表示されますが、ビルドすると動いているか判断できません。ConsoleのEditorから表示するプログラムの対象を変更することができます。


[Script Debugging]にもチェックを入れると、デバッガーでブレークポイントを設定することができるようになります。

実行してデバッガーを接続してみましょう。Visual StudioでUnity Debuggerにアタッチします。

[WindowsPlayer]と表示されている方を選んでOKを押します。これでUnityPlayerと接続します。


ブレークポイントを設定すると、そこできちんと止まってくれます。


次ページ:
<3>Debugを使った視覚的なデバッグ:Debug.DrawRay()

その他の連載