UnityUnityメモ

【デバッグ強化】Unityのコンソールログを活用して効率的にバグを特定する方法

Unity
  1. 1. はじめに
  2. 2. Unityのコンソールログとは?
  3. 3. Debug.Logを使ってコンソールにメッセージを表示
    1. 3.1 Debug.Log の基本的な使い方
    2. 3.2 変数の値を確認する方法
    3. 3.3 複数の情報をまとめて表示する
    4. 3.4 Debug.Log のラベル付けで見やすくする
    5. 3.5 Debug.Log の応用テクニック
    6. まとめ
  4. 4. Debug.LogWarningとDebug.LogErrorで重要なログを強調
    1. 🔶 Debug.LogWarningで警告を表示
    2. 🔴 Debug.LogErrorでエラーを強調
    3. ⚡ Debug.LogWarningとDebug.LogErrorの使い分け
    4. 🎯 まとめ
  5. 5. コンソールフィルターを活用して必要なログだけを表示
  6. 6. Debug.Assertで特定条件を満たさない場合に警告を出す
    1. ◆ Debug.Assert の基本的な使い方
    2. ◆ Debug.Assert の活用例
    3. ◆ Debug.Assert の注意点
    4. ◆ まとめ
  7. 7. Debug.DrawRayやDebug.DrawLineを使って視覚的にデバッグ
    1. ① Debug.DrawRay でレイ(光線)を描画する
    2. ② Debug.DrawLine で2点間に線を描画する
    3. ③ Debug.DrawRay と Debug.DrawLine の違い
    4. ④ Debug.DrawRay の duration を指定する
    5. ⑤ Debug.DrawRay を使った具体的なデバッグ例
    6. まとめ
  8. 8. 効率的なデバッグのためのベストプラクティス
    1. 1. 不要なログを多用しすぎない
    2. 2. スクリプトごとに識別しやすいログを作る
    3. 3. #if UNITY_EDITOR を使って本番環境でログを出さない
    4. 4. Debug.LogWarning や Debug.LogError を適切に使い分ける
    5. 5. Debug.Assert で条件を満たさないときにエラーメッセージを表示
    6. 6. Debug.DrawRay でオブジェクトの動きを視覚的に確認
    7. まとめ
  9. 9. まとめ
  10. よくある質問(FAQ)
    1. 関連記事:

1. はじめに

Unityでゲーム開発をしていると、思った通りに動かないバグに悩まされることがよくありますよね。「キャラクターが動かない」「スコアが正しく加算されない」「特定のオブジェクトが消えない」など、バグの原因を特定するのに時間がかかることも少なくありません。

そんなときに役立つのが コンソールログ です!Unityには、Debug.Log というコマンドを使ってスクリプトの動作状況をコンソールに出力できる機能があります。この機能を活用すれば、コードのどこで問題が発生しているのかを素早く特定し、デバッグの効率を大幅に向上させる ことができます。

この記事では、Debug.Log の基本的な使い方から、Debug.LogWarningDebug.LogError で重要なログを見分ける方法、さらには Debug.AssertDebug.DrawRay などを活用した応用テクニックまで、Unityのデバッグを効率化する方法を詳しく解説します。

初心者の方でもすぐに実践できる内容になっているので、「バグをもっと効率的に見つけたい!」という方はぜひ参考にしてください!




2. Unityのコンソールログとは?

Unityのコンソール(Console)ウィンドウは、ゲーム開発において非常に重要な役割を果たします。特にスクリプトのデバッグ時に役立ち、エラーメッセージやログを確認することで、バグの発見や動作の確認ができます。

コンソールウィンドウの基本

Unityエディタの下部にある「Console」タブをクリックすると、コンソールウィンドウを開くことができます。もし見当たらない場合は、以下の手順で開きましょう。

  1. メニューから開く方法
    • 上部メニューの「Window(ウィンドウ)」をクリック
    • General(一般)」→「Console(コンソール)」を選択
  2. ショートカットキーを使う方法
    • Ctrl + Shift + C(Windows)
    • Cmd + Shift + C(Mac)

このウィンドウには、エラー・警告・通常のログの3種類のメッセージが表示されます。

コンソールに表示されるメッセージの種類

Unityのコンソールログには、以下のように3つのタイプのメッセージが表示されます。

メッセージの種類説明
通常のログ(Log)Debug.Log で出力される情報"プレイヤーのスコア: 100"
警告(Warning)Debug.LogWarning で出力。問題が発生する可能性がある"残りHPが10未満です"
エラー(Error)Debug.LogError で出力。重大なエラーやバグを示す"敵キャラのデータが読み込めません"

これらのメッセージを適切に活用することで、スクリプトの動作確認やバグの特定をスムーズに行うことが可能になります。

次のステップでは、実際にDebug.Logを使ってコンソールにメッセージを表示する方法を解説します!




3. Debug.Logを使ってコンソールにメッセージを表示

Unityでスクリプトを作成していると、想定通りに動かないことがよくあります。そんなときに役立つのが Debug.Log です。Debug.Log を使うことで、スクリプトの動作を確認しながらデバッグできます。ここでは Debug.Log の基本的な使い方や、より便利な活用方法を解説します。


3.1 Debug.Log の基本的な使い方

Debug.Log は、Unityのコンソールにメッセージを表示するためのメソッドです。スクリプトの任意の場所で Debug.Log を使うと、そのメッセージが Unity の Console ウィンドウに表示されます。

例えば、以下のスクリプトを使ってメッセージを出力できます。

using UnityEngine;

public class DebugExample : MonoBehaviour
{
void Start()
{
Debug.Log("ゲームが開始されました!");
}
}

このスクリプトを Unity のオブジェクトにアタッチしてゲームを再生すると、Console ウィンドウに 「ゲームが開始されました!」 というメッセージが表示されます。


3.2 変数の値を確認する方法

Debug.Log は、単なるメッセージだけでなく、変数の値を確認するのにも便利です。ゲームの挙動がおかしいと感じたときは、変数の値をコンソールに出力して確認しましょう。

例えば、プレイヤーのスコアを表示したい場合、以下のように記述します。

using UnityEngine;

public class ScoreLogger : MonoBehaviour
{
int score = 100;

void Start()
{
Debug.Log("現在のスコア: " + score);
}
}

このコードを実行すると、Console ウィンドウに 「現在のスコア: 100」 と表示されます。変数の値が想定通りになっているか確認するときに役立ちます。




3.3 複数の情報をまとめて表示する

ゲーム開発では、複数の変数を同時にチェックしたい場面がよくあります。その場合、+ を使って文字列をつなげたり、C#の 文字列補間(String Interpolation) を活用すると便利です。

例えば、プレイヤーのスコアとライフを同時に表示する場合、以下のように書けます。

using UnityEngine;

public class PlayerStatus : MonoBehaviour
{
int score = 200;
int health = 3;

void Start()
{
// ① 文字列を + で連結する方法
Debug.Log("スコア: " + score + " ライフ: " + health);

// ② 文字列補間(String Interpolation)を使う方法(C# 6.0 以降)
Debug.Log($"スコア: {score} ライフ: {health}");
}
}

②の Debug.Log($"スコア: {score} ライフ: {health}"); のように $”” を使った記述 は、コードが読みやすくなるのでおすすめです。


3.4 Debug.Log のラベル付けで見やすくする

大量のログがコンソールに出力されると、どのログがどのスクリプトから出力されたのかわかりにくくなります。そんなときは、スクリプト名やカテゴリをメッセージに追加すると、どこから出力されたログなのか一目でわかるようになります。

using UnityEngine;

public class PlayerLogger : MonoBehaviour
{
int score = 150;

void Start()
{
Debug.Log("[Player] スコア: " + score);
}
}

コンソールに [Player] スコア: 150 と表示されるので、複数のスクリプトからログを出力していても識別しやすくなります。


3.5 Debug.Log の応用テクニック

Debug.Log にはいくつかの便利な使い方があります。

(1) gameObject.name を使って、オブジェクト名を表示する

複数のオブジェクトから Debug.Log を出力すると、どのオブジェクトのログなのかわかりにくくなります。そんなときは、gameObject.name を使って、どのオブジェクトのメッセージなのかを明示できます。

using UnityEngine;

public class ObjectLogger : MonoBehaviour
{
void Start()
{
Debug.Log(gameObject.name + " がスタートしました!");
}
}

このスクリプトを複数のオブジェクトにアタッチすると、コンソールには以下のように出力されます。

Player がスタートしました!
Enemy がスタートしました!
ItemBox がスタートしました!

オブジェクトごとにログが出るので、デバッグがしやすくなります。

(2) Time.time を使って、処理のタイミングを記録する

処理が実行された時間を知りたい場合は、Time.time を使って、ゲーム開始からの経過時間を記録できます。

using UnityEngine;

public class TimeLogger : MonoBehaviour
{
void Update()
{
Debug.Log("更新時刻: " + Time.time);
}
}

コンソールに出力されるメッセージの例:

更新時刻: 1.02
更新時刻: 1.98
更新時刻: 2.45

どのタイミングで処理が実行されたのかが分かりやすくなります。


まとめ

  • Debug.Log を使えば、スクリプトの動作確認が簡単にできる
  • 変数の値を確認することで、バグの原因を特定しやすくなる
  • 文字列補間 $"" を使うと、ログが見やすくなる
  • gameObject.nameTime.time を活用すると、デバッグがより効率的になる

次のステップでは、より高度なデバッグ方法として Debug.LogWarningDebug.LogError を活用する方法を紹介します!




4. Debug.LogWarningとDebug.LogErrorで重要なログを強調

UnityのDebug.Logは基本的なデバッグ用のメソッドですが、プロジェクトが大きくなると、どのログが本当に重要なのか分かりにくくなることがあります。そこで役立つのが、Debug.LogWarningDebug.LogErrorです。これらを適切に使うことで、警告や重大なエラーを一目で識別できるようになります。


🔶 Debug.LogWarningで警告を表示

「このままだと問題が起こるかもしれない」というときに使うメソッドDebug.LogWarningです。コンソール上では黄色のメッセージとして表示されるため、通常のDebug.Logと区別しやすくなります。

📌 Debug.LogWarningの使い方

void Start()
{
int playerHealth = 20;

if (playerHealth < 30)
{
Debug.LogWarning("プレイヤーのHPが低くなっています!");
}
}

🔹 実行結果(コンソールログ)

プレイヤーのHPが低くなっています!

🔹 ポイント

  • プレイヤーのHPが30未満になったら警告を出す
  • エラーではないが、開発者に「このままだと問題が起こるかも?」と伝える
  • ゲームのバランス調整などで役立つ

🔴 Debug.LogErrorでエラーを強調

Debug.LogErrorは、「これは明らかにバグなので、すぐに修正すべき!」という場合に使用します。コンソール上では赤色のメッセージとして表示され、重大な問題であることが一目で分かります。

📌 Debug.LogErrorの使い方

void Start()
{
int playerHealth = -10;

if (playerHealth < 0)
{
Debug.LogError("エラー!プレイヤーのHPが0未満になっています!");
}
}

🔹 実行結果(コンソールログ)

エラー!プレイヤーのHPが0未満になっています!

🔹 ポイント

  • HPが0未満になるのはあり得ない状況なので、エラーとして通知
  • ゲームが異常な状態になっていることを開発者に知らせる
  • Debug.LogErrorは、バグを早期に発見しやすくするための強力なツール



⚡ Debug.LogWarningとDebug.LogErrorの使い分け

メソッド用途表示される色
Debug.LogWarning警告(問題の可能性あり)黄色「HPが低い」「スクリプトの処理が遅れている」
Debug.LogErrorエラー(重大なバグ)赤色「HPが0未満」「オブジェクトが見つからない」

例えば、ゲームのスクリプトでプレイヤーのHPを管理する場合、次のように使い分けられます。

void Update()
{
int playerHealth = GetPlayerHealth();

if (playerHealth < 30)
{
Debug.LogWarning("プレイヤーのHPが低下しています!");
}

if (playerHealth < 0)
{
Debug.LogError("エラー!HPが負の値になっています!");
}
}

このように、通常のデバッグメッセージ(Debug.Log)、警告(Debug.LogWarning)、エラー(Debug.LogError)を適切に使い分けることで、Unityのコンソールログがぐっと見やすくなります!


🎯 まとめ

Debug.LogWarningは、「このままだと問題が起こるかも?」というときに使用(黄色)
Debug.LogErrorは、「今すぐ修正すべきバグ!」というときに使用(赤色)
✅ 適切に使い分けることで、デバッグの効率が大幅にアップ!

これでDebug.LogWarningDebug.LogErrorの活用方法がバッチリですね!もし他にも知りたいことがあれば、気軽に聞いてください! 🎮✨




5. コンソールフィルターを活用して必要なログだけを表示

Unityで開発していると、コンソールに大量のログが流れてきて、どの情報が本当に重要なのか分からなくなることがあります。そんなときに便利なのが コンソールのフィルター機能 です。この機能を使えば、エラーメッセージや特定の種類のログだけを表示して、効率的にデバッグできます。


5.1 コンソールのフィルターとは?

UnityのConsoleウィンドウには、次の3つのログタイプを区別するフィルターボタンがあります。

  1. ログ(Log):通常の情報を表示する (Debug.Log)
  2. 警告(Warning):注意が必要なメッセージを表示する (Debug.LogWarning)
  3. エラー(Error):深刻な問題が発生したときのメッセージを表示する (Debug.LogError)

コンソールの上部にある 「Log」「Warning」「Error」 のボタンをクリックすると、必要なログだけを絞り込むことができます。


5.2 フィルターを活用する方法

では、具体的にどのようにフィルターを使うのか、実際に試してみましょう。

① 通常のログ(Debug.Log)だけを表示する
  • 手順:コンソールの上部にある「Log」ボタンだけをオンにする
  • 効果:通常のデバッグ情報だけを確認できる
Debug.Log("プレイヤーが移動しました。");

➡ このメッセージだけをコンソールに表示


② 警告ログ(Debug.LogWarning)だけを表示する
  • 手順:「Warning」ボタンだけをオンにする
  • 効果:重大ではないが注意が必要なログのみを表示
Debug.LogWarning("プレイヤーのHPが少なくなっています!");

➡ HPが少なくなったときの警告メッセージを表示




③ エラーログ(Debug.LogError)だけを表示する
  • 手順:「Error」ボタンだけをオンにする
  • 効果:ゲームが正常に動作しない原因を素早く発見できる
Debug.LogError("敵のスクリプトが見つかりません!");

➡ スクリプトのミスやバグを見つけやすくなる


5.3 文字列検索で特定のログだけを表示

さらに、コンソールの 検索バー を使うと、特定のキーワードを含むログだけを表示できます。

例:プレイヤーに関するログだけを表示
  1. コンソールの検索バーに「Player」と入力
  2. 「Player」を含むログのみ表示
Debug.Log("Playerがジャンプしました。");
Debug.Log("PlayerのHP: 50");
Debug.LogError("Playerがダメージを受けました!");

「Player」関連のログだけをピックアップ できるので、デバッグがしやすくなります。


5.4 コンソールのフィルターを活用するメリット

  • 不要なログを削除する手間が減る
  • エラーや警告を素早く見つけられる
  • 特定のログを検索してピンポイントでデバッグできる
  • 大量のログに埋もれず、重要な情報に集中できる

Unityのコンソールフィルターを活用すれば、大量のログの中から 必要な情報だけを効率的にチェック できます。「Log」「Warning」「Error」のフィルターボタンや検索機能を上手く使い分けて、スムーズにデバッグを進めましょう!




6. Debug.Assertで特定条件を満たさない場合に警告を出す

ゲームを開発していると、「この値は絶対に0以上のはず」「このオブジェクトは必ず存在するはず」といった前提条件をチェックしたくなることがあります。もしその前提が崩れてしまったら、予期しないバグが発生する可能性がありますよね?

そんなときに便利なのが Debug.Assert です!
Debug.Assert は、指定した条件が false の場合にエラーメッセージを表示してくれる機能です。エディタ上でデバッグするときに役立つので、バグを早期に発見できます。


◆ Debug.Assert の基本的な使い方

基本の書き方はとてもシンプルです。

Debug.Assert(条件, "エラーメッセージ");

条件が false(満たされない)場合にエラーを出す という仕組みになっています。
試しに、プレイヤーのHPが 0未満になったらエラーを出す というチェックをしてみましょう。

例:プレイヤーのHPが0未満にならないかチェック

using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
public int health = 100; // 初期HP

void Update()
{
// HPがマイナスにならないかチェック
Debug.Assert(health >= 0, "エラー: プレイヤーのHPが0未満になっています!");
}
}

このコードを実行すると、もし health-1 などになった場合、コンソールに以下のようなエラーメッセージが出力されます。

Assertion failed: エラー: プレイヤーのHPが0未満になっています!

◆ Debug.Assert の活用例

では、他にもどんな場面で Debug.Assert を使うと便利か見ていきましょう。

1. 必須のオブジェクトが設定されているかチェック

ゲーム開発では、特定のオブジェクトがシーンに存在していないとエラーになることがあります。例えば、プレイヤーのカメラが設定されていない場合などです。

public class CameraChecker : MonoBehaviour
{
public Camera mainCamera;

void Start()
{
Debug.Assert(mainCamera != null, "エラー: メインカメラが設定されていません!");
}
}

このスクリプトを使えば、メインカメラが アタッチされていない 場合に警告を出すことができます。


2. 配列の要素数が正しいかチェック

例えば、敵の出現ポイントが最低でも3つ必要な場面を考えてみましょう。
間違って2つ以下になっていたらエラーを出したいですよね。

public class SpawnPointsChecker : MonoBehaviour
{
public Transform[] spawnPoints;

void Start()
{
Debug.Assert(spawnPoints.Length >= 3, "エラー: スポーンポイントが3つ未満です!");
}
}

このコードでは、spawnPoints の数が 3つ未満 だった場合にエラーが出ます。
デバッグ時にすぐ問題を発見できるので、バグの早期修正につながります。


◆ Debug.Assert の注意点

Debug.Assert開発中のデバッグ専用 で使用することが推奨されます。
なぜなら、 リリースビルド(本番のゲーム)では機能しない ためです。
リリース時には Assert のチェックが削除されるため、実際のゲームプレイには影響を与えません。

そのため、プレイヤー向けのエラーチェックには使えない ことを覚えておきましょう!
本番環境で問題を防ぎたい場合は、if 文を使って明示的にエラー処理を行うのがベストです。


◆ まとめ

  • Debug.Assert は、特定の条件が false だった場合に警告を出すデバッグツール
  • ゲームの前提条件が正しく守られているかをチェックするのに便利
  • オブジェクトの存在確認や変数の値のチェックに活用できる
  • リリースビルドでは無効になるため、デバッグ専用として使用する

これを活用すれば、ゲーム開発中のバグを 早期発見&素早く修正 できるようになりますよ!




7. Debug.DrawRayやDebug.DrawLineを使って視覚的にデバッグ

Unityでゲーム開発をしていると、「オブジェクトがちゃんと動いているのか」「意図した方向に力が加わっているのか」など、視覚的に確認したい場面がたくさんあります。そんなときに便利なのが Debug.DrawRayDebug.DrawLine です!

これらを使えば、エディタ上でデバッグ用の線を表示して、オブジェクトの動きや向きを確認できるので、数値だけをコンソールで確認するよりも直感的にデバッグできます。


① Debug.DrawRay でレイ(光線)を描画する

Debug.DrawRay は、ある地点から指定した方向に向かって光線(レイ)を描くことができます。たとえば、「オブジェクトがどの方向に進んでいるか」「レイキャスト(Raycast)が正しく動作しているか」などを視覚的にチェックできます。

🔹 Debug.DrawRay の基本的な使い方

void Update()
{
Vector3 startPos = transform.position; // 現在のオブジェクトの位置
Vector3 direction = transform.forward * 5f; // 前方向に5メートル
Debug.DrawRay(startPos, direction, Color.red);
}

💡ポイント

  • startPos:光線を出す開始位置
  • direction:光線の方向と長さ
  • Color.red:赤色で描画

👀 実行すると? エディタの「Sceneビュー」でオブジェクトの前方に赤い線が表示されます。これで、オブジェクトがどの方向を向いているのかを簡単に確認できます!


② Debug.DrawLine で2点間に線を描画する

Debug.DrawLine は、指定した2つの地点を結ぶ線を描画します。例えば、オブジェクト同士の距離を確認したり、ナビゲーションの経路をデバッグするのに役立ちます。

🔹 Debug.DrawLine の基本的な使い方

void Update()
{
Vector3 pointA = transform.position; // オブジェクトの位置
Vector3 pointB = pointA + new Vector3(3f, 0f, 0f); // 3メートル右に移動した位置
Debug.DrawLine(pointA, pointB, Color.green);
}

💡ポイント

  • pointA:線の始点
  • pointB:線の終点
  • Color.green:緑色で描画

👀 実行すると? エディタの「Sceneビュー」に緑色の線が表示され、オブジェクトの位置関係を直感的に確認できます。




③ Debug.DrawRay と Debug.DrawLine の違い

機能Debug.DrawRayDebug.DrawLine
開始位置startPospointA
終了位置startPos + directionpointB
使い道方向を示す2点間の関係を示す

簡単に言うと、Debug.DrawRay は「方向を示す光線」Debug.DrawLine は「2点間を結ぶ線」 です。


④ Debug.DrawRay の duration を指定する

デフォルトでは、これらの線は 1フレームしか表示されません。そのため、duration を指定すると、一定時間表示させることができます。

🔹 5秒間表示させる例

void Update()
{
Debug.DrawRay(transform.position, transform.forward * 5f, Color.blue, 5f);
}

このコードでは、青いレイが 5秒間表示 されるので、デバッグがしやすくなります!


⑤ Debug.DrawRay を使った具体的なデバッグ例

例えば、「レイキャストが意図した方向に飛んでいるか」を確認したい場合、Debug.DrawRay を使えば、どこに向かって飛んでいるのかを視覚的にチェックできます。

void Update()
{
RaycastHit hit;
Vector3 rayStart = transform.position;
Vector3 rayDirection = transform.forward;

Debug.DrawRay(rayStart, rayDirection * 10f, Color.yellow);

if (Physics.Raycast(rayStart, rayDirection, out hit, 10f))
{
Debug.Log("Hit Object: " + hit.collider.gameObject.name);
}
}

このコードでは、

  1. Debug.DrawRay黄色の線を表示(10mの長さ)
  2. Physics.Raycast を使って、オブジェクトに当たったかチェック
  3. 当たったら Debug.Log でオブジェクト名を表示

こうすることで、「レイがどこに向かっているのか」と「本当にオブジェクトに当たっているのか」を 一目で確認 できます。


まとめ

Debug.DrawRay → 方向を示す光線を描く
Debug.DrawLine → 2点間の線を描く
duration を指定すれば 一定時間表示 可能
レイキャストのデバッグ には Debug.DrawRay が便利

コンソールログだけでは分かりにくいバグも、視覚的に確認することでデバッグがしやすくなります! Unityのデバッグをより効率化するために、ぜひ活用してみてください!




8. 効率的なデバッグのためのベストプラクティス

Unityのデバッグをスムーズに行うためには、単にDebug.Logを使うだけではなく、適切な書き方や管理の仕方を工夫することが大切です。ここでは、効率的なデバッグのためのベストプラクティスを紹介します。


1. 不要なログを多用しすぎない

Debug.Logは開発中にとても便利ですが、大量に使いすぎるとログが溢れかえってしまい、本当に必要な情報を見つけるのが難しくなります。特に、毎フレーム出力するようなログはパフォーマンスの低下につながることもあるので注意が必要です。

❌ 悪い例(毎フレーム大量のログを出す)

void Update()
{
Debug.Log("プレイヤーの座標: " + transform.position);
}

✅ 良い例(特定の条件でログを出す)

void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("ジャンプした!");
}
}

ポイント:

  • 毎フレーム実行されるUpdate内でDebug.Logを多用しない
  • 必要なイベントが発生したときだけログを出す

2. スクリプトごとに識別しやすいログを作る

ログが増えてくると、どのスクリプトから出力されたのか分かりにくくなります。[スクリプト名] のようなタグをつけると、識別が簡単になります。

✅ 例(スクリプト名を表示する)

void Start()
{
Debug.Log("[PlayerController] ゲーム開始");
}

✅ 例(オブジェクト名も一緒に表示)

void Start()
{
Debug.Log($"[{gameObject.name}] スタート");
}

ポイント:

  • [] で括ると見やすくなる
  • $"" (C#の文字列補間) を使うとスッキリ書ける
  • オブジェクト名を入れると、どのオブジェクトのログか分かりやすい



3. #if UNITY_EDITOR を使って本番環境でログを出さない

Debug.LogはUnityエディタ内では便利ですが、本番環境(ビルド後)で不要なログを出すとパフォーマンスが低下する可能性があります。#if UNITY_EDITOR を使うと、エディタで実行しているときだけログを出すことができます。

✅ 例(エディタ実行時のみログを出す)

void Start()
{
#if UNITY_EDITOR
Debug.Log("エディタでのデバッグ用ログ");
#endif
}

ポイント:

  • #if UNITY_EDITOR ... #endif の間に書いたコードは、エディタ実行時のみ有効
  • ビルド後の実行ファイルではこのログが表示されないので、パフォーマンスを維持できる

4. Debug.LogWarning や Debug.LogError を適切に使い分ける

すべてのログをDebug.Logで出すと、重要なエラーメッセージが埋もれてしまいます。エラーの深刻度に応じて、適切なログ関数を使い分けましょう。

✅ 例(通常のログ)

Debug.Log("ゲームがスタートしました");

✅ 例(警告ログ – 黄色表示)

Debug.LogWarning("HPが少なくなっています!");

✅ 例(エラーログ – 赤色表示)

Debug.LogError("プレイヤーのHPが0になりました!");

ポイント:

  • Debug.LogWarning は警告として使う(例:HPが少なくなった)
  • Debug.LogError はゲームが停止するような重大な問題で使う(例:スクリプトが見つからない)

5. Debug.Assert で条件を満たさないときにエラーメッセージを表示

Debug.Assert を使うと、特定の条件が満たされなかったときにエラーメッセージを出すことができます。バグの発見に役立つので、重要なチェックポイントで活用しましょう。

✅ 例(HPが0未満にならないようにチェック)

void TakeDamage(int damage)
{
playerHealth -= damage;
Debug.Assert(playerHealth >= 0, "HPが負の値になっています!");
}

ポイント:

  • Debug.Assert(条件, "エラーメッセージ"); の形式で使う
  • 条件がfalseになるとエラーメッセージが出る
  • 条件を満たしていれば何も表示されない

6. Debug.DrawRay でオブジェクトの動きを視覚的に確認

コンソールログだけでなく、Debug.DrawRay を使うとゲームシーン内でデバッグ情報を視覚的に確認できます。例えば、オブジェクトの向いている方向や、レイキャストの判定を可視化できます。

✅ 例(オブジェクトの向きを赤線で表示)

void Update()
{
Debug.DrawRay(transform.position, transform.forward * 5, Color.red);
}

ポイント:

  • Debug.DrawRayエディタのSceneビュー でのみ表示される
  • レイキャストの判定など、視覚的に確認したい場合に便利

まとめ

効率的にデバッグを行うためには、単にDebug.Logを使うだけでなく、適切な方法で整理しながらログを出力することが重要です。

ベストプラクティスまとめ

  1. 不要なログを多用しすぎない(特定の条件でのみ表示)
  2. スクリプト名やオブジェクト名を含めて分かりやすくする
  3. #if UNITY_EDITOR を使って本番環境ではログを表示しない
  4. Debug.LogWarningDebug.LogError でエラーの重要度を区別
  5. Debug.Assert を使って重要な条件チェックをする
  6. Debug.DrawRay で視覚的にデバッグする

これらを活用すれば、バグの特定がスムーズになり、開発の効率が大幅に向上します!




9. まとめ

Unityのコンソールログを活用することで、バグの特定と修正がよりスムーズになります。特にDebug.Logを使いこなせば、コードのどこで問題が発生しているのかをすばやく見つけることができます。以下に、この記事で学んだポイントをまとめます。

  1. Debug.Logで基本的なデバッグを行う
    • 変数の値や処理の流れを確認するのに役立つ
    • $""string.Formatを活用してわかりやすいログを出力する
  2. Debug.LogWarningDebug.LogErrorを適切に使い分ける
    • Debug.LogWarning は警告を出すのに使い、見落としを防ぐ
    • Debug.LogError はエラーを強調し、深刻な問題を素早く発見できる
  3. コンソールのフィルタ機能を活用する
    • Log Type(通常ログ、警告、エラー)を選択して、不要な情報を省く
    • 大量のログの中から、必要なメッセージを素早く見つける
  4. Debug.Assertで特定条件を満たさないときに警告を出す
    • 「絶対にこの条件が成立しているはず」というチェックを入れる
    • 例:プレイヤーのHPがマイナスにならないようにする
  5. Debug.DrawRayDebug.DrawLineで視覚的にデバッグする
    • 3Dゲームではオブジェクトの動きや向きを可視化するのに便利
    • カメラや敵の視線、レイキャストの軌道などをデバッグしやすくなる
  6. デバッグを効率化するための工夫をする
    • #if UNITY_EDITOR を活用し、ビルド時に不要なログを削減する
    • ログの出力を整理し、スクリプトごとに識別できるようなメッセージを作る
    • 必要なログだけを出力するようにし、コンソールを見やすくする

コンソールログを正しく活用すれば、バグの発見スピードが格段に向上し、開発の効率もアップします。特に、適切なログの使い分けとフィルタリングを駆使することで、必要な情報だけを効率よく取得できるようになります。ぜひ、今回紹介したテクニックを活用して、快適なUnity開発を実現してください!




よくある質問(FAQ)

Q
Unityのコンソールログが表示されないのはなぜ?
A

Consoleウィンドウが閉じている可能性があります。「Window」→「General」→「Console」から開きましょう。また、Debug.Logの記述ミスがないかも確認してください。

Q
Debug.Logを大量に使うとパフォーマンスに影響はある?
A

はい、特に実機で動作させるとパフォーマンス低下の原因になります。#if UNITY_EDITOR を使って、エディタ実行時のみログを出すようにするのがオススメです。

Q
Debug.LogErrorを使うとゲームがクラッシュする?
A

Debug.LogError自体はクラッシュの原因にはなりませんが、エラー内容によってはゲームが停止することがあります。エラーメッセージをよく確認しましょう。

タイトルとURLをコピーしました