Version: 2018.4
言語: 日本語
統合開発環境 (IDE) サポート
イベントシステム

Unity での C# コードのデバッグ

デバッガーを使用すると、アプリケーションやゲームの実行中にソースコードを検査することができます。Unity は、以下のコードエディターを使用して C# コードのデバッグをサポートします。

  • Visual Studio (Visual Studio Tools for Unity プラグインを使用)

  • Visual Studio for Mac

  • Jetbrains Rider

  • Visual Studio Code

これらのコードエディターは、サポートするデバッガー機能がわずかに異なりますが、すべてがブレークポイント、シングルステップ、変数検査などの基本的な機能を提供します。

Unity のマネージコードデバッグは WebGL を除くすべてのプラットフォームで使用できます。Mono と IL2CPP 両方のスクリプティングバックエンドで動作します。

コードエディターの設定

Visual Studio (Windows)

Unity エディターのインストーラーには、Visual Studio Tools for Unity プラグインといっしょに Visual Studio をインストールするためオプションが含まれています。これは Unity を使ったデバッグ用に Visual Studio を設定する推奨される方法です。

Visual Studio が既にコンピューターにインストールされている場合は、Tools > Extensions and Updates メニューを使用して、Visual Studio Tools for Unity プラグインを見つけてインストールします。

Visual Studio for Mac

Unity エディターのインストーラーには、Visual Studio for Mac をインストールするためオプションが含まれています。これは Unity を使ったデバッグ用に Visual Studio for Mac を設定する推奨される方法です。

Visual Studio for Mac が既にコンピューターにインストールされている場合は、Extension Manager を使用して、Visual Studio Tools for Unity プラグインを見つけてインストールします。

JetBrains Rider

JetBrains Rider のデフォルトのインストールでは、Windows または Mac で Unity のコードをデバッグできます。インストールするには JetBrains ウェブサイト を参照してください。

VS Code

VS Code を使用するには、Unity でコードをデバッグするために拡張機能をインストールする必要があります。インストールするには、こちらの拡張機能の 説明 に従ってください。

Unity の Preferences

コードエディターをインストールしたら、Unity > Preferences > External Tools を開き、External Script Editor を使用するコードエディターに設定します。

エディターでのデバッグ

Unity エディターが再生モードにあるときに、Unity エディターで実行されているスクリプトコードをデバッグすることができます。デバッグを試みる前に、Unity の Preferences で Editor Attaching オプションが有効になっていることを確認してください。このオプションを使用すると、エディターは Just In Time (JIT) コンパイルを使用してマネージコードをデバッグ情報とともに実行します。

まず、コードエディターで、スクリプトコードの行のブレークポイント (デバッガーの停止位置) を設定します。Visual Studio では、例えば、コードの左側の列で、デバッガーを停止したい行をクリックします (下図参照)。行番号の横に赤い円が表示され、行がハイライト表示されます。

次に、コードエディターを Unity エディターに設定します (Attach to Unity)。このオプションはコードエディターによって異なり、コードエディターの通常のデバッグ処理とオプションが異なる場合があります。Visual Studio では、オプションは以下のようになります。

コードエディターの中には、デバッグする Unity のインスタンスを選択できるものがあります。例えば、Visual Studio の Debug> Attach Unity Debugger オプションを使用すると、この機能が使用可能になります。

コードエディターを Unity エディターに設定したら、Unity エディターに戻って再生モードを開始します。ブレークポイントのコードが実行されると、デバッガーは停止します。例えば以下のようになります。

コードエディターがブレークポイントにある間、変数の内容を段階的に見ることができます。デバッガーで継続 (continue) オプションを選択するか、デバッグモードを停止するまで、Unity エディターは応答しません。

プレイヤーでのデバッグ

Unity プレイヤー で実行中のスクリプトコードをデバッグするには、プレイヤーをビルドする前に、Development Build と Script Debugging オプションを有効にしてください (これらのオプションは File> Build Settings にあります)。Wait For Managed Debugger オプションを有効にすると、スクリプトコードが実行される前に、デバッガーがプレイヤーにアタッチされるのをプレイヤーが待機させることができます。

コードエディターを Unity プレイヤーにアタッチするには、プレイヤーの IP アドレス (またはマシン名) とポートを選択します。 Visual Studioでは、Attach To Unity オプションのドロップダウンメニューは以下のようになります。

Debug > Attach Unity Debugger オプションは以下のようになります。

デバッガーをプレイヤーにアタッチし、Unity エディターにアタッチしないように注意してください (両方が実行されている場合)。デバッガーをアタッチしたら、通常のデバッグを続行できます。

Android と iOS デバイスのデバッグ

Android

Android デバイスで実行中にプレイヤーをデバッグする場合は、USB または TCP 経由でデバイスに接続します。例えば、Visual Studio (Windows) で Android デバイスに接続するには、Debug > Attach Unity Debugger を選択します。 プレイヤーインスタンスを実行しているデバイスのリストが表示されます。

この場合、携帯機器は Unity エディターと Visual Studio を実行するワークステーションの USB か同じネットワーク上の Wi-Fi を通して接続されます。

iOS

iOS デバイスで実行されているプレイヤーをデバッグする場合は、TCP 経由でデバイスに接続します。たとえば、Visual Studio (Mac) で iOS デバイスに接続するには、Debug > Attach Unity Debugger オプションを選択します。プレイヤーインスタンスを実行しているデバイスのリストが表示されます。

デバイスが 1 つのアクティブなネットワークインターフェースのみを持ち (Wi-Fi が推奨なのでモバイルデータ通信をオフにします)、IDE とデバイスの間のファイアウォールが TCP ポートをブロックしていないことを確認します (上記のスクリーンショットでポート番号 56000)。USB 経由のデバッグは iOS ではサポートされていません。

デバッガーのトラブルシューティング

デバッガーのほとんどの問題は、コードエディターが Unity エディターやプレイヤーを見つけることができないために発生します。つまり、デバッガーを正しく設定できないということです。デバッガーはエディターまたはプレイヤーへの TCP 接続を使用するため、接続の問題はしばしばネットワークによって発生します。以下は、基本的な接続問題のトラブルシューティングを行うための手順です。

デバッガーを正しい Unity インスタンスに設定するよう確認する

コードエディターは、デバッグが有効になっているローカルネットワーク上のすべての Unity エディターまたは Unity プレイヤーに設定することができます。デバッガーを設定する場合は、正しいインスタンスにアタッチしていることを確認します。Unity プレイヤーを実行しているデバイスの IP アドレスやマシン名が分かっている場合は、正しいインスタンスを見つけるのに役立ちます。

Unity インスタンスへのネットワーク接続を確認する

コードエディターは、Unity プロファイラーが使用するのと同様のメカニズムを使用して、デバッグする Unity インスタンスを見つけます。コードエディターが Unity インスタンスを見つけることができない場合は、Unity プロファイラーをそのインスタンスに接続してみてください。Unity プロファイラーもそれを見つけることができない場合は、コードエディター、または Unity インスタンス (または両方) を実行しているマシンにファイアウォールが存在する可能性があります。ファイアウォールがある場合は、以下の ファイアウォール設定について を参照してください。

デバイスがアクティブなネットワークインターフェースを 1 つしか持たないように確認する

多くのデバイスは複数のネットワークインターフェースを持っています。例えば、携帯電話はアクティブなモバイル通信接続とアクティブな Wi-Fi 接続の両方がある場合があります。デバッガーを TCP に正しく接続するには、IDE がデバイスの正しいインターフェースにネットワーク接続する必要があります。Wi-Fi 経由でデバッグする場合は、デバイスを機内モードにして他のすべてのインターフェースを無効にしてから、Wi-Fi を有効にしてください。

Unity プレイヤーが IDE に指示する IP アドレスは、プレイヤーログで確認することができます。次のようなログの一部を見てください。


Multi-casting "[IP] 10.0.1.152 [Port] 55000 [Flags] 3 [Guid] 2575380029 [EditorId] 4264788666 [Version] 1048832 [Id] iPhonePlayer(Joshs-iPhone):56000 [Debug] 1 [PackageName] iPhonePlayer" to [225.0.0.222:54997]...

このメッセージは、IDE が IP アドレス 10.0.1.152 とポート 56000 を使用してデバイスに接続しようとしていることを示しています。この IP アドレスとポートは、IDE を実行しているコンピューターからアクセス可能である必要があります。

ファイアウォールの設定を確認する

Unity インスタンスは、TCP 接続を通してコードエディターと通信します。ほとんどの Unity プラットフォームでは、この TCP 接続は任意に選択されたポートで行われます。通常、このポートはコードエディターが自動的に検出する必要があるため、ポートを認識する必要はありません。それでもうまくいかない場合は、ネットワーク分析ツールを使用して、コードエディターを実行しているマシンや、Unity インスタンスを実行しているマシンやデバイスのうち、どのポートがブロックされているかを判断してください。ポートが見つかったら、ファイアウォールが、コードエディターを実行しているマシンのポートと Unity インスタンスを実行しているマシンの両方にアクセスできることを確認します。

マネージデバッグ情報が有効であることを確認する

デバッガーがアタッチしても、ブレークポイントがロードされない場合は、デバッガーがコードのマネージデバッグ情報を見つけることができない可能性があります。マネージコードのデバッグ情報は、ディスク上のマネージアセンブリ (.dllファイル) の隣の .dll.mdb または .pdb という名前のファイルに格納されます。

正しい Preferences とビルドオプションが有効になっていると (上記を参照)、Unity は自動的にこのデバッグ情報を生成します。ただし、Unity はプロジェクト内のマネージプラグインのデバッグ情報を生成することはできません。関連する .dll.mdb や .pdb ファイルがディスク上の Unity プロジェクトのマネージプラグインの隣にある場合には、マネージプラグインからコードをデバッグすることは可能です。

デバイスがロックされないようにする

アプリケーションをデバッグするために使用しているデバイスに画面ロックがある場合は、これが無効になっていることを確認してください。画面ロックはデバッガーが切断される原因となり、再接続を妨げます。マネージコードのデバッグ中に画面がロックされないように気をつけてください。画面がロックされている場合は、デバッガーが再度接続する前に、デバイス上でアプリケーションを再起動する必要があります。

  • 2018–09–06 編集レビュー を行ってパブリッシュされたページ

  • マネージコードのデバッグは 2018.2 で追加

統合開発環境 (IDE) サポート
イベントシステム