Tips

【Unity】埋め込んだログのファイル名と行番号を表示する

はじめに

Unityでは、Debug.LogやMonoBehaviour.printでUnityエディタ上のコンソールにログを吐き出すことができます。

処理を通っているか確認したり、その時点の変数の中身を確認する用途でちょくちょくお世話になるわけですが、あちこち埋めこんでいくとどこに埋め込んだやつか分からなくなってきます。そのため、埋め込んだファイル名や行番号も表示できるようにロギング関数を拡張してみようと思います。

Caller Info アトリビュートでロギングクラスを作る

ファイル名や行数を表示するには、ロギング関数を呼んだ時点の呼び出し元のファイル名と行数の情報がないといけません。C#5から、それらの値を取得するCaller Info アトリビュートが追加されています。その機能を使ってLoggingクラスを作ってみます。

上のLogメソッドでは、message引数の他に3つのアトリビュート付きの変数がつけられています。

・[CallerFilePath]の付いた引数は、呼び出し元のファイルパスで置き換えられます。

・[CallerMemberName] の付いた引数は、呼び出し元のメソッド名で置き換えられます。

・[CallerLineNumber] の付いた引数は、呼び出し元の行番号で置き換えられます。

Caller Info アトリビュートは、オプショナル引数に対して設定できますので0などのデフォルト値を付けないとコンパイルエラーになります。上のLogging.Logでは、4つ引数が要求されていますが、 Caller Info アトリビュートを付けた引数は、呼び出し元の情報で引数が自動的に設定されるため、第二引数以降は、コードから渡してあげる必要はありません。

使ってみる

元のサンプルクラスのログ関数を置き換えてみると、確かに呼び出し元の情報が出力されることがわかります。

Pocket