MonoDevelopとは,Unityの提供する 統合開発環境 (IDE)です。IDEは,よく知られているテキストエディターの機能と,デバッグやその他プロジェクトの管理作業などの追加の要素を組み合わせて使えます。テキストエディターについてここでは触れません。そちらについては直感的に使えるからです。しかし,エディターの統合やUnityのデバッグについては以下で説明します。
MonoDevelop は Unity によって最初からインストールされます。しかし,インストールウィンドウにそれを除外するオプションもあります。MonoDevelop が外部スクリプトエディターとして設定されているかを Preference で確認しましょう(メニューから, Unity > Preferences をクリックし, External Tools パネルを選択しましょう)。このオプションが有効になっていると, Unity は Monodevelop を立ち上げ,デフォルトエディターとして全てのスクリプトファイルを編集するのに使用します。
MonoDevelop のソースレベルでのデバッグ(詳しくは下記をご覧下さい)を有効にするために,まずは Editor Attaching オプションが有効になっているかを Preference の External Tools パネルより確認してください。それから, Unity のプロジェクトと MonoDevelop のプロジェクトを同期させましょう(メニューより, Assets > Sync MonoDevelop Project を選択して下さい)。また, Development Build と Script Debugging オプションも対象のプラットフォームに合わせて確実に有効にしておいて下さい(メニューより, File >Build Settings を選択してください)。もし WebPlayer をビルドするのであれば,それに加えてブラウザ上のプレーヤーでコンテキストメニューを開き(Windows では右クリック,Mac OSX では cmdクリック),Release Channel > Development の設定を有効にしましょう。
デバッグに関するセッションを始める前に,MonoDevelop でメニューから Run > 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 メニューのコマンドとしても実行できます(一番右にあるボタンは Detach で,デバッグセッションを終わらせたい時に使います)。 Continue は次のブレークポイントまでは実行を続けます。 Step Over と Step In はともに現時点のコード1行を実行するものです。この2つの違いは, Step Over はその行の全ての関数呼び出しを一度に実行し,一方 Step In は段階的な関数の実行を継続させます。関数では Step In を図らずとも使うのが一般的なことから,それが正しいと思われています。 Step Out は現在の関数の最後まで実行を継続し,その後元々呼ばれたコードで再び一時停止します。
これ以上のソースレベルでのデバッグテクニックの詳細紹介はここでは不適切ですが,この件についての知識を提供する様々な書籍やウェブ上での記事があります。それに加えて,少し経験すれば技術の力や,これらのテクニックをどのように使ってほとんどの種類のバグを見つけるのかという感覚を得ることの手助けになるでしょう。