Unityで思い通りに動かないときの確認方法|Debug.Log・DrawLine・DrawRayの使い方
Unityでゲームを作っていると、
「コードを書いたのに動かない」
「当たり判定が反応しない」
「変数の値が思った通りにならない」
「どこで処理が止まっているのか分からない」
ということがよくあります。
このようなときに役立つのが、Debug です。
特に、Debug.Log を使うと、処理が呼ばれているか、変数に何が入っているかをConsoleに表示して確認することができます。
今回は、Unity初心者向けに
・Debug.Logの基本
・Consoleウィンドウの見方
・文字と変数を一緒に表示する方法
・Debug.LogWarningとDebug.LogError
・Debug.DrawLineとDebug.DrawRay
について解説します。
1.はじめに
Unity初心者のうちは、エラーが出たときや思った通りに動かないときに、どこを見ればよいか分からなくなることがあります。
たとえば、
・Startが呼ばれていないのか
・Updateは動いているのか
・if文の中に入っているのか
・当たり判定が呼ばれているのか
・変数の値が正しく変わっているのか
こういったことは、画面を見ているだけでは分かりにくいです。
そこで使うのが、Debug.Logです。
Debug.Logを使うと、Consoleにメッセージを表示できます。
Debug.Log("ここまで来ました");このように書いておくと、その処理が実行されたときにConsoleに文字が表示されます。

2.Consoleウィンドウを開く方法
Debug.Logで表示した内容は、UnityのConsoleウィンドウに表示されます。Consoleが表示されていない場合は、Unity上部のメニュー、もしくは「controlキー」+「shiftキー」+「Cキー」で開きます。
Window
→ General
→ Console
Consoleには、ログや警告、エラーが表示されます。
コードが思った通りに動かないときは、まずConsoleを見る習慣をつけておくとよいです。
3.Debug.Logとは
Debug.Logは、Consoleにメッセージを表示するための命令です。
Debug.Log("Hello Unity");このコードが実行されると、Consoleに
Hello Unityと表示されます。
たとえば、Startが呼ばれているか確認したい場合は、次のように書きます。
void Start()
{
Debug.Log("Startが呼ばれました");
}ゲームを再生したときにConsoleに表示されれば、Startが正しく呼ばれていることが分かります。
まずは「ここまで来た」を表示してみる
初心者にとって一番分かりやすい使い方は、処理が通っているかを確認することです。
void Start()
{
Debug.Log("ここまで来た");
}たとえば、ボタンを押したときの処理が動いているか確認したい場合は、次のように書けます。
public void PushButton()
{
Debug.Log("ボタンが押されました");
}このログが出れば、ボタンの処理は呼ばれています。
ログが出なければ、ボタンの設定や関数の指定が間違っている可能性があります。
このように、Debug.Logを使うと、
処理が呼ばれていないのか
処理は呼ばれているけど、その後が間違っているのか
を切り分けることができます。
Debug.Logの中に文字を書く
Debug.Logのかっこの中には、表示したい文字を書きます。
文字を書くときは、ダブルクォーテーション " で囲みます。
Debug.Log("プレイヤーがジャンプしました");このように、文字は必ず " で囲みます。
日本語でも英語でも、文字として表示したい場合は " で囲む必要があります。
変数の中身を表示する
Debug.Logでは、変数の中身も表示することができます。
たとえば、HPを確認したい場合は次のように書きます。
int hp = 100;
void Start()
{
Debug.Log(hp);
}この場合、Consoleには
100と表示されます。
ただし、数字だけ表示されると、あとから見たときに何の数字か分かりにくいので、文字と一緒に表示することが多いです。
+ で結合する方法
Debug.Log("現在のHP:" + hp);このように書くと、Consoleには次のように表示されます。
現在のHP:100上のように文字と変数を一緒に表示するときは、+ を使ってつなげることができます。
複数の変数を表示することもできます。
Debug.Log("HP:" + hp + " / スコア:" + score);この書き方は分かりやすく、初心者にも使いやすいです。
ただし、表示する変数が増えると、少し読みにくくなることがあります。
$ を使って書く方法
C#では、文字の前に $ を付けることで、文字の中に変数を埋め込むことができます。
Debug.Log($"現在のHP:{hp}");この書き方では、変数を { } の中に書きます。
たとえば、
int hp = 100;
int score = 50;
void Start()
{
Debug.Log($"HP:{hp} / スコア:{score}");
}Consoleには、次のように表示されます。
HP:100 / スコア:50+でつなげる書き方と比べると、文章の中にそのまま変数を入れられるので、見た目が分かりやすくなります。
+ で結合する方法と$を使う方法の違い
どちらの書き方でも、Consoleに表示する結果は同じです。
Debug.Log("現在のHP:" + hp);Debug.Log($"現在のHP:{hp}");どちらも、Consoleには次のように表示されます。
現在のHP:100使い慣れないうちは、まず + でつなげる方法を覚えておくとよいです。
慣れてきたら、$"文字{変数}" の書き方も使ってみましょう。
個人的には、変数が1つだけなら + でも充分で、わかりやすいと思います。変数が複数ある場合は、$を使った方が見やすくなると思います。
活用例1:if文に入っているか確認する
Debug.Logは、if文の確認にもよく使います。
たとえば、HPが0以下になったらゲームオーバーにしたい場合を考えます。
if (hp <= 0)
{
Debug.Log("HPが0以下になりました");
}このログが出れば、if文の条件が成立していることが分かります。
逆に、HPが0以下になっているはずなのにログが出ない場合は、
・hpの値が思った通りに減っていない
・条件式が間違っている
・そもそもこの処理が呼ばれていない
といった原因が考えられます。
変数の値も一緒に表示すると、さらに分かりやすくなります。
Debug.Log($"現在のHP:{hp}");
if (hp <= 0)
{
Debug.Log("ゲームオーバー処理に入りました");
}活用例2:当たり判定の実行を確認する
Unity初心者がよくつまずくのが、当たり判定です。
OnTriggerEnterやOnCollisionEnterが反応しないときは、まずログを入れて確認します。
void OnTriggerEnter(Collider other)
{
Debug.Log("何かが入りました");
}このログが出れば、OnTriggerEnterは呼ばれています。
さらに、何に触れたのかを確認したい場合は、other.nameを表示します。
void OnTriggerEnter(Collider other)
{
Debug.Log("触れた相手:" + other.name);
}または、$を使って次のように書けます。
void OnTriggerEnter(Collider other)
{
Debug.Log($"触れた相手:{other.name}");
}タグを確認したい場合は、次のように書きます。
void OnTriggerEnter(Collider other)
{
Debug.Log($"触れた相手のタグ:{other.tag}");
if (other.CompareTag("Player"))
{
Debug.Log("Playerに触れました");
}
}このようにすると、
・当たり判定が呼ばれているか
・何のオブジェクトに触れたのか
・タグが正しく設定されているか
を確認することができます。
4.Debug.LogWarningとは
Debug.LogWarningは、Consoleに警告を表示するための命令です。
Debug.LogWarning("HPが少なくなっています");通常のログより目立つ形で表示されます。

エラーではないけれど、注意して確認したい場合に使います。
たとえば、HPが少なくなったときに警告を出すことができます。
if (hp <= 10)
{
Debug.LogWarning($"HPが少なくなっています:{hp}");
}5.Debug.LogErrorとは
Debug.LogErrorは、Consoleにエラーとして表示するための命令です。
Debug.LogError("Playerが見つかりません");
たとえば、必要なオブジェクトが見つからなかったときに使えます。
if (player == null)
{
Debug.LogError("Playerオブジェクトが設定されていません");
}nullが原因でエラーになりそうな場所では、事前に確認しておくと原因を見つけやすくなります。
if (target == null)
{
Debug.LogError("targetがnullです");
return;
}このように return を入れておくと、targetがない状態で次の処理に進むのを防ぐこともできます。
6.Debug.DrawLineとは
Debug.DrawLineは、Sceneビューに線を表示するための命令です。
Debug.DrawLine(transform.position, target.position, Color.red);DrawLineでは、線の開始地点と終了地点を指定します。
Debug.DrawLine(開始位置, 終了位置, 色);たとえば、自分の位置からターゲットの位置まで線を引く場合は、次のように書けます。
public Transform target;
void Update()
{
Debug.DrawLine(transform.position, target.position, Color.red);
}これは、敵からプレイヤーへの方向を確認したいときなどに便利です。
注意点として、Debug.DrawLineの線は、基本的にGameビューではなくSceneビューで確認します。
7.Debug.DrawRayとは
Debug.DrawRayも、Sceneビューに線を表示する命令です。
DrawLineとの違いは、指定の仕方です。
DrawLineは、開始位置と終了位置を指定します。
Debug.DrawLine(start, end, Color.red);一方、DrawRayは、開始位置と方向を指定します。
Debug.DrawRay(start, direction, Color.blue);たとえば、オブジェクトの前方向に線を出したい場合は、次のように書けます。
void Update()
{
Debug.DrawRay(transform.position, transform.forward * 5f, Color.blue);
}この例では、オブジェクトの位置から前方向に5の長さの線を表示します。
Raycastを使っているときは、Debug.DrawRayを使うと、どの方向に判定を飛ばしているのか確認しやすくなります。
void Update()
{
Vector3 direction = transform.forward;
if (Physics.Raycast(transform.position, direction, out RaycastHit hit, 5f))
{
Debug.Log($"当たった相手:{hit.collider.name}");
}
Debug.DrawRay(transform.position, direction * 5f, Color.green);
}このようにすると、Raycastの方向をSceneビューで確認できます。
8.よく使うDebugのまとめ
今回紹介したDebugの使い方をまとめると、次のようになります。

Debug.Log
→ 通常の確認に使う
Debug.LogWarning
→ 注意として表示したいときに使う
Debug.LogError
→ エラーとして目立たせたいときに使う
Debug.DrawLine
→ 開始位置と終了位置を指定してSceneビューに線を表示する
Debug.DrawRay
→ 開始位置と方向を指定してSceneビューに線を表示する
文字と変数を一緒に表示する場合は、次の2つの書き方があります。
Debug.Log("現在のHP:" + hp);Debug.Log($"現在のHP:{hp}");どちらも同じように表示できます。
初心者のうちは、まず + でつなげる方法を覚え、慣れてきたら $"文字{変数}" の書き方も使ってみましょう。
9.まとめ
今回は、Unityで思った通りに動かないときの確認方法として、Debugの使い方を紹介しました。
ゲーム制作では、コードを書いてすぐに思った通り動くとは限りません。
そのようなときに大切なのは、いきなり原因を決めつけるのではなく、
処理が呼ばれているか
変数の値は正しいか
if文の中に入っているか
当たり判定は反応しているか
Rayの向きは合っているかを一つずつ確認することです。
Debug.Logを使えば、Consoleで処理や変数の状態を確認できます。Debug.DrawLineやDebug.DrawRayを使えば、Sceneビューで方向や線を見える形で確認できます。
初心者のうちは、エラーを直すことよりも、まず今、何が起きているのかを確認することが大切です。
そのための基本として、Debugの使い方を覚えておきましょう。
次回は、
・Consoleウィンドウの便利な使い方
・ログ、警告、エラーの違い
・ClearやCollapseの使い方
・エラーをクリックして場所を確認する方法
・初心者がよく見るエラーの例
について解説します。
こちらはUnity初心者向けの記事をテーマ別にまとめています。
▼ Unity初心者向け記事まとめはこちら
こちらのマガジン「ミニゲーム作成講座 全8回セット」でもシーンの切り替えなどを活用して、初心者でも知識ゼロから作れるミニゲーム作成講座を紹介しています。

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!