Unity×Visual Studio 連携でC#デバッグを始めよう

~Debug Mode の切り替え方法も徹底解説~


はじめに

Unity のプロジェクトでゲームを開発していると、コードのバグや想定外の挙動を追跡する必要が出てきます。そこで役立つのが、Visual Studio と連携したブレークポイントによるデバッグです。本資料では、Debug Mode の切り替え方法を含め、Unity と Visual Studio を使ったデバッグ手順をチュートリアル形式で紹介します。また、常にデバッグモードにしておく場合の利点と、必要なときだけ一時的にデバッグモードに切り替える方法についても解説します。


1. Visual Studio の準備

1.1 Visual Studio のインストール

  • Visual Studio (Community / Professional / Enterprise) をインストールしてください。
  • 近年の Visual Studio には Visual Studio Tools for Unity が標準で含まれているため、追加インストールは不要な場合が多いです。
  • 古いバージョンを使用している場合は、拡張機能としてインストールが必要になることがあります。

1.2 Unity の External Script Editor の設定

  1. Unity のメニューから Edit > Preferences… (Mac の場合は Unity > Preferences…)を選択します。
  2. External Tools タブで External Script Editor を “Visual Studio” に設定します。
    • これにより、Unity エディターでスクリプトをダブルクリックすると、自動的に Visual Studio が起動またはフォーカスされるようになります。

2. Debug Mode の切り替え

Unity では、Debug Mode(デバッグモード)と Release Mode(最適化モード)を切り替えてスクリプトをコンパイルできます。Debug Mode はブレークポイントやウォッチなどの詳細なデバッグ情報を提供しますが、パフォーマンスに影響を与える場合があります。

2.1 エディター右下から切り替える

  • Unity エディターの右下に「Mode: Release」または「Mode: Debug」と表示される箇所があります。
  • Mode: Release → クリック → 「Switch to debug mode」を選択すると、Debug Mode に切り替わり、スクリプトが再コンパイルされます。
  • Mode: Debug → クリック → 「Switch to release mode」を選択すると、Release Mode に戻ります。

2.2 Preferences から切り替える

  • Edit > Preferences… (Mac の場合は Unity > Preferences…)を開き、General タブを選択します。
  • Code Optimization On Startup という項目がある場合、ここで Debug / Release を切り替え可能です。
  • 切り替え時にはスクリプトの再コンパイルが走るため、Play中であれば停止してから実施しましょう。

2.3 常に Debug Mode にする場合と一時的に切り替える場合の利点

  • 常に Debug Mode にしておく利点
    • 毎回モードを切り替える手間がなく、どのタイミングでも即座にデバッグ機能(ブレークポイント、ウォッチ、コールスタックなど)を利用できます。
    • 問題発生時にすぐデバッグを開始でき、即時フィードバックを得ることが可能です。
  • 一時的に Debug Mode に切り替える利点
    • 通常の動作やパフォーマンステスト時は Release Mode で最適化された状態を維持し、必要なときだけ Debug Mode に切り替えることで、パフォーマンスへの影響を最小限に抑えられます。
    • 特にブレークポイントを使用してデバッグするタイミングでのみ Debug Mode にするのは、開発とパフォーマンス検証の両方をバランスよく行う方法です。

補足:
Debug Mode はブレークポイントを使ったデバッグが可能ですが、実行時のパフォーマンスが低下するため、リリース時やパフォーマンス検証時には Release Mode に戻すのが一般的です。

通常、リリースモードにしておくと良いでしょう
VisualStudioでデバッグする時に次のメッセージが表示されます
ここでは、Enable debugging for this sessionを選択しましょう

このポップアップは、Unity の C# デバッガをアタッチしようとした際に、現在のプロジェクトが “Debug Mode” に設定されていないために表示されるダイアログです。主に次のような内容を伝えています:

翻訳

C# Debugger Attached

デバッガをアタッチしようとしていますが、現在のプロジェクトで Debug Mode がオフになっています。

Unity を Debug Mode にすると C# のパフォーマンスは低下しますが、デバッガをアタッチできるようになります。Debug Mode に切り替えると、すべてのスクリプトが再コンパイルおよび再読み込みされます。

このエディター セッションのみ一時的に Debug Mode を有効にするか、今後すべてのプロジェクトに対して Debug Mode を有効にするか、またはデバッガのアタッチを取り消すことができます。

すべてのプロジェクトに対して有効にした場合は、後から「Preferences」内の「Code Optimization on Startup」の設定で変更できます。

(全文はエディターのログファイルを参照してください)

  • Enable debugging for this session(このセッションのみデバッグを有効にする)
  • Enable debugging for all projects(すべてのプロジェクトでデバッグを有効にする)
  1. Debug Mode がオフになっている
    • Unity では、プロジェクトの C# コードを「Debug Mode」または「Release Mode」(最適化モード) でコンパイルできます。
    • Debug Mode ではパフォーマンスが低下する代わりに、デバッガのアタッチやブレークポイントの使用などが可能になります。
    • 現在は Debug Mode が無効(= Release Mode に近い状態) になっているので、デバッガをアタッチできない。
  2. Debug Mode をオンにすると再コンパイルが走る
    • Debug Mode に切り替えると、スクリプトを再コンパイル・再読み込みする必要があるため、エディタが一度リフレッシュされる。
  3. 一時的に有効にするか、すべてのプロジェクトに対して有効にするかを選べる
    • 「Enable debugging for this session (このセッションのみ有効)」を選ぶと、現在のエディタを起動している間だけ Debug Mode になる。
    • 「Enable debugging for all projects (すべてのプロジェクトで有効)」を選ぶと、Unity エディタ全体で今後も常に Debug Mode になる。
    • もちろん「Cancel (取り消し)」すれば、そのままデバッガなしで続行できる。
  4. 後から設定を変更するには “Code Optimization on Startup” の設定を使う
    • Unity エディタの Preferences(「Edit > Preferences…」など)内に “Code Optimization on Startup” という項目があり、Debug / Release の切り替えが可能。
    • そこで設定を変更すれば、起動時に自動で Debug Mode にするかどうかを切り替えられる。

対処法

  • 一時的にデバッグしたい場合: 「Enable debugging for this session」をクリックする。これでエディタが再読み込みされた後、Visual Studio や Rider などからブレークポイントを使ってデバッグできるようになる。
  • 今後ずっとデバッグしたい場合: 「Enable debugging for all projects」をクリックする。常時 Debug Mode になるが、その分パフォーマンスは落ちる可能性がある。
  • Debug Mode にしたくない場合: 「Cancel」を選択してデバッガのアタッチをやめる。

注意点

  • Debug Mode はビルドしたアプリのパフォーマンスにも影響する場合があるので、本番リリースビルドの際は Release Mode(最適化有効)に戻すことが推奨されます。
  • Unity バージョンによっては「Code Optimization (Debug/Release)」のメニュー構成が多少変わっていることがあります。新しい Unity だと、メニュー内の Edit > Preferences > General タブにある「Code Optimization On Startup」を Debug にするか Release にするかで切り替えます。

要するに「現在 Release Mode だからデバッガをアタッチできないよ。Debug Mode に切り替えますか?」という確認ダイアログです。デバッグが必要なら “Enable debugging…” を、パフォーマンス優先や今はデバッグ不要なら “Cancel” を選びましょう。


3. スクリプトにブレークポイントを設定する

3.1 Visual Studio でスクリプトを開く

  • Unity のプロジェクト ウィンドウで、デバッグしたい C# スクリプトをダブルクリックします。
  • Visual Studio が起動(またはフォーカス)し、該当スクリプトが表示されます。

3.2 ブレークポイントを設定

  • Visual Studio で、止めたいコード行の行番号の左側余白をクリックします。
  • 赤い丸印(ブレークポイント)が表示されれば設定完了です。
  • 同じ箇所を再度クリックすると、ブレークポイントが解除されます。

4. Unity と Visual Studio を接続(デバッガをアタッチ)

4.1 Visual Studio 側でアタッチ

  • Visual Studio のメニューから デバッグ > Unityデバッガーのアタッチ… を選択するか、ツールバーにある Unityにアタッチ ボタンをクリックします。
  • 複数の Unity プロセスが動作している場合は、アタッチ先のエディターを正しく選んでください。

4.2 Unity で Play

  • Unity エディターに戻り、Play ボタン (▶) を押してゲームを実行します。
  • 該当箇所のコードが呼ばれると、ブレークポイントで停止し、Visual Studio 側にフォーカスが移ります。

デバッグ中は虫の色が青になります


5. デバッグ操作

5.1 ステップ実行

ブレークポイントで停止した状態で、Visual Studio のデバッグボタンから以下の操作が可能です:

  • Step Over (F10): 現在行の処理を実行し、次の行へ移動
  • Step Into (F11): メソッド呼び出しの中に入る
  • Step Out (Shift+F11): 現在のメソッドから抜ける

5.2 変数の値を確認・変更

  • Locals ウィンドウ / Watch ウィンドウ で、現在の変数の値を確認できます。
  • 変数をダブルクリックすると、値の変更も可能です。

5.3 呼び出し履歴の確認

  • 呼び出し履歴ウィンドウ で、どのメソッドからどのように呼び出されたかを確認できます。
  • バグの原因を追跡する際、処理の流れを把握するのに役立ちます。

5.4 実行の再開・停止

  • 続行 (F5): ブレークポイント解除状態で実行を再開
  • デバッグの停止 (Shift+F5): デバッグを完全に終了

6. デバッグ終了後

6.1 Unity 側で停止

  • Visual Studio でデバッグを終了した後、Unity エディターに戻り、再度 Play ボタン を押してゲームの実行を停止します。

6.2 コード修正や再デバッグ

  • コードを修正・保存すると、Unity が自動でリコンパイルします。
  • 必要に応じて、再度「Unityにアタッチ」→「Play」を繰り返してデバッグを続けます。

7. トラブルシューティング

7.1 ブレークポイントが無視される/ヒットしない

  • Debug Mode に切り替えているかを確認(右下の「Mode:」表示や Preferences をチェック)。
  • 該当コードが実際に呼ばれているか(Update や Start が正しく呼び出されているか、条件分岐に入っているか)を確認。
  • Visual Studio と Unity が正しく接続されているか(Attach 先が正しいか)を確認します。

7.2 デバッグ中に Unity がフリーズ/重くなる

  • Debug Mode は通常実行よりもオーバーヘッドがあるため、ゲームが重く感じる場合があります。
  • 不要なブレークポイントを削除するか、デバッグ終了後に Release Mode に戻すと、パフォーマンスが改善されます。

7.3 「C# Debugger Attached」などのダイアログが出る場合

  • Debug Mode でない状態でデバッガをアタッチしようとすると、ダイアログが表示されることがあります。
  • この場合、「Enable debugging for this session」を選び、スクリプトの再コンパイルを行えばデバッグが可能になります。

まとめ

  1. Debug/Release の切り替え
    • エディター右下の「Mode: Release/Debug」から、または Preferences > GeneralCode Optimization On Startup で切り替え。
  2. Visual Studio を外部エディタに設定
  3. Visual Studio でブレークポイントを設定
  4. 「Attach to Unity」で Unity にアタッチし、Unity で Play
  5. ブレークポイントで停止したら、ステップ実行や変数の値確認を行う
  6. デバッグ後は必要に応じて Release Mode に戻してパフォーマンスを回復

また、常に Debug Mode にしておく利点としては、いつでも即座に詳細なデバッグ情報が得られる点がありますが、通常の動作やパフォーマンステストでは Release Mode を使用することで、最適化された環境を維持できます。状況に応じてモードを使い分けることで、開発効率と実行パフォーマンスの両立が可能です。

これらの手順とポイントをマスターすれば、Unity プロジェクトの複雑な挙動やバグを効率的に見つけ、修正することができ、開発作業をよりスムーズに進めることができます。ぜひ活用して、快適なデバッグ環境を整えてください。

Unity,デバッグ

Posted by hidepon