MonoDevelop とは、Unity の提供する 統合開発環境 (IDE)です。IDE は、よく知られているテキストエディターの機能と、デバッグやその他プロジェクトの管理作業などの追加の要素を組み合わせて使えます。テキストエディターについてここでは触れません。そちらについては直感的に使えるからです。しかし、エディターの統合や Unity のデバッグについては以下で説明します。
MonoDevelop は Unity によって最初からインストールされます。しかし、インストールウィンドウにそれを除外するオプションもあります。MonoDevelop が外部スクリプトエディターとして設定されているかを Preference で確認しましょう(メニューから、Unity > Preferences をクリックし、External Tools パネルを選択しましょう)。このオプションが有効になっていると、Unity は Monodevelop を立ち上げ、デフォルトエディターとしてすべてのスクリプトファイルを編集するのに使用します。
MonoDevelop のソースレベルでのデバッグ(詳しくは下記を参照してください)を有効にするために、まずは Editor Attaching オプションが有効になっているかを Preference の External Tools パネルより確認してください。それから、Unity のプロジェクトと MonoDevelop のプロジェクトを同期させましょう(メニューより、Assets > Open C# Project を選択してください)。また、Development Build と Script Debugging オプションも対象のプラットフォームに合わせて確実に有効にしておいてください(メニューより、File >Build Settings を選択してください)。
デバッグセッションを開始する直前に、再生ボタンの隣にあるターゲットリスト (Unity Editor、OSX Player など) からデバッグしたい目標を選択します。また、Attach To Process を選択して、デバッグ可能なすべての Unity プロセスのリストを表示することもできます。
上記の手順を終了したら、Unity スクリプトをデバッグする準備は終了で、あとは再生ボタンをクリックするだけです。
先ほど開いたソースファイルは MonoDevelop 内でタブとして表示され、それらは標準的なテキストエディターと同じように編集することができます。しかし、エディターパネルの左には灰色の breakpoint bar もあります。このバーの中でクリックするとコードの行の横に ブレークポイントマーカー (breakpoint marker)と呼ばれるものが加わります。
ブレークポイントをある行に追加すると、プレイモードの間にその行を実行する直前に、Unity にスクリプトの実行を一時停止するように指示を出します。スクリプトがこのように「固まった」ときスクリプトが何をやっているかを正確に判断するためにデバッガーを使うことができます。
ブレークポイントで一時停止が実行されたとき実行状況に関する情報は MonoDevelop ウィンドウ下部のタブで表示されます。おそらく、これらの中で一番重要なものは Locals タブです。
これは、最近実行している関数内のローカル変数の値を表示しています。(「 this 」という疑似ローカル変数は、明示的に宣言しなくともどの関数でも自動で利用可能になるものです。this は、今開いているスクリプトのインスタンスへの参照ですので、スクリプトで宣言されたすべての変数は「 this 」を経由してアクセスできます。)コードに print ステートメントを記述したのと同様の効果を得るために、Locals タブとの組み合わせでブレークポイントを使用することができます。つまり、好きなタイミングで変数の値を問い合わせることができるのです。しかし、Locals タブの中からも変数の値を編集することができます。これは、いつ変数が間違った設定をされているのかを見つけ、値がどういう風にあるべき設定をなされたときに問題が消えるのか見たいときに便利です。
MonoDevelop のさらに便利な点は single stepping です。ブレークポイントで実行が止まったとき MonoDevelop ウィンドウの上の方で小さなデバッグツールのバーが使用できるようになります。
5 つのうち、左 4 つのボタンは順に Continue、Step Over、Sttep In そして Step Out という名前で、Run メニューのコマンドとしても実行できます。Continue は次のブレークポイントまでは実行を続けます。Step Over と Step In はともに現時点のコード 1 行を実行するものです。この 2 つの違いは、Step Over はその行のすべての関数呼び出しを一度に実行し、一方 Step In は段階的な関数の実行を継続させます。関数では Step In を図らずとも使うのが一般的なことから、それが正しいと思われています。Step Out は現在の関数の最後まで実行を継続し、その後元々呼ばれたコードで再び一時停止します。
これ以上のソースレベルでのデバッグテクニックの詳細紹介はここでは不適切ですが、この件についての知識を提供するさまざまな書籍や Web 上での記事があります。それに加えて、少し経験すれば技術の力や、これらのテクニックをどのように使ってほとんどの種類のバグを見つけるのかという感覚を得ることの手助けになるでしょう。