15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Debug.Log(System.Object, UnityEngine.Object)オーバーロード

Posted at

はじめに

 Unity開発において、Debug.Logはよく使うと思います。

 実はDebug.Logメソッドは、二つのオーバーロードが存在します。

  • public static void Log(System.Object message)
  • public static void Log(System.Object message, UnityEngine.Object context)

 1つ目のオーバーロードは良く使う方も多いと思います。ところで2つ目の方のオーバーロード、ご存知でしたか?お恥ずかしながら僕は知りませんでした。

ログを吐いたコンポーネントを所持するゲームオブジェクトを識別できる

 public static void Log(object message, Object context)ドキュメントには次のように説明されています。

When you select the message in the console a connection to the context object will be drawn. This is very useful if you want know on which object an error occurs.

 なるほど、試してみましょう。

 次のようなSample.csを用意します。

using UnityEngine;

public class Sample : MonoBehaviour
{
	void Start ()
	{
		Debug.Log ("Hello Log with context.", gameObject);
	}
}

 新規シーンを作成、空のゲームオブジェクトを作ってSampleコンポーネントを付与した後、実行します。

 コンソールウィンドウで表示された「Hello Log with context.」というログをクリックすると。次の画像の通り、ヒエラルキー中のSampleコンポーネントが付与されているゲームオブジェクトがハイライトされました。

スクリーンショット 2015-03-20 0.57.02.png

 この機能、あるコンポーネントが複数のGameObjectに付与されていた場合などで、どのGameObjectのものか識別できて便利かもしれませんね。コンソールウィンドウ中のログをダブルクリックすると該当コードが開く事は知っていましたが、これは知りませんでした。

 ところで、

Debug.Log ("Hello Log with context.", gameObject);

 を

Debug.Log ("Hello Log with context.", this);

 に変えても、同じようにハイライトされました。ヒエラルキービュー中のゲームオブジェクトに加えて、インスペクタに表示されているSampleコンポーネントもハイライトされる、なんてことはありませんでした。

 ちなみにこれは、Debug.Logだけでなく、

 でも同様のオーバーロードを持っています。むしろこれらのメソッドでの活用の方が多そうですね。

呼び出したGameObject以外もハイライトできる

 呼び出したGameObject以外もハイライトできました。

 例えば、

  • インスペクタから設定したプレファブ
  • Resource.Load<T>で読みこんだリソース

 などは、ヒエラルキービュー中でなくプロジェクトビュー中のオブジェクトがハイライトされました。

まとめ

 結構使う機会がありそうですね。知らなかったです。Debug.Logより、Debug.Warningnなどで使う方が多いかもしれませんが。

 もしかして常識ですか?だったら恥ずかしい。

 蛇足ですが、個人的なUnityへの不満(もう改善のしよいがない系のものなのですが)の一つに、UnityEngine.Objectクラスのクラス名が、System.Objectと区別がつきづらくてしょうがない、というものがあります。

public static void Log(object message, Object context)

 objectはSystem.Object、ObjectはUnityEngine.Objectですが、ぱっと見て非常にわかりずらい。

 

15
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?