この記事は PONOS Advent Calendar 2021の15日目の記事です。
昨日は@honeniqさんでした。
はじめに
Unityのログを標準のまま使用すると見辛くなってしまうことないですか?
開発が進めば進むほど様々なログが増えてしまい自分のログが埋もれてしまうなんて経験をした人も多いのではないでしょうか。
ログのためにあまり時間とお金をかけたくないけど、ログは見やすくしたい!
本日はその状況を打破するべくUnityのConsoleに表示されるログを見やすくする方法について考えてみました。
快適な開発への参考になれば嬉しいです。
(使用しているUnityは2020.3.4f1です)
## Consoleの検索の有効活用
まずは元々ある機能でログを見やすくする方法考えました。
目をつけたのはConsole画面の検索機能を利用することです。
メッセージの前にタグ(グルーピングできる目印となれば何でも可です)を入れられるようにすることで必要なものだけ表示できるようにする方法。
ログを出すときにひと手間加える必要がありますが簡易に行えます。
UnityEngine.Debug.Log($"[{tag}]{message}", context);
上記のようにタグを埋め込んでおくと、Consoleの検索窓に対象のタグを入れるだけで見たいものが絞り込めるようになります。
タグ部分を太文字にするなどタグを入れるだけで目に付きやすくできるのでオススメです。
タグを色付けして目に付きやすくする
続いては「Consoleの検索の有効活用」で紹介したタグをさらに有効活用する方法です。
ログ全て表示しておきたいけど自分の必要なログが探し辛い!といったケースもあるかと思います。
ただ、下の図のように全部白文字だと自分の見たいログがどれだか探せないといったことも。
そんな時にタグ部分に色がついていたら探しやすいのでないでしょうか。
本文まで色がつくと逆に色が散らばりすぎて目がチカチカしそうなのでタグのみ色付けしてみました。
UnityEngine.Debug.Log($"<b><color=#{color}>[{tag}]</color></b>{message}, context);
上記のようにして色情報を渡してもらうなどがパッと思いつくところかと思います。
ただ、何色にするのかを自分で考えるのが大変という側面もあるかと思います。
であれば、タグの文字列から自動で色を作成できないか...を考えてみました!
今回は色被りは考慮していませんが自動であれば色を自分で考えなくて済むので楽になるかと思います。
文字列を数値に変換し色作成
さて、色を作成する前に考慮しないといけない点があります。
それはRGBカラーだと黒や灰色といったConsole上に載せるには見え辛くなる色がある点です。
見えない色が選ばれてしまうとログを見やすくするという本題から外れてしまい本末転倒な結果になってしまいます。
そこで見え辛い色を避けるためHSL形式で色を作成しRGBにする方式を取ろうと考えました。
int CalculateTotalColorIntToTagString(string tag)
{
int val = 0;
foreach (var c in tag)
{
val += (int)c;
}
return val;
}
string CreateColor(int colorInt)
{
int correctionValue = colorInt / 360;
// 色相を0~1の間に納める
var hue = (float)(colorInt - (correctionValue * 360)) / 360f;
// HSV形式をRGB形式に変換
// 彩度と明度は固定。(数値は適当)
var color = UnityEngine.Color.HSVToRGB(hue, 1, 1);
// カラーコードに変換して返す
return "#" + ColorUtility.ToHtmlStringRGB(color);
}
簡易的に作成してみました。
処理の流れとしてはタグの文字をCalculateTotalColorIntToTagStringで一文字ずつアスキーコードにして数値化し合算していきます。
その合計値をCreateColorに渡し、色相として扱いHSVを作成していきます。
彩度と明度を変更する必要はないかと思うのでここでは固定値で使用しています。
作成されたHSVをRGBに変換してカラーコードを作成しました。
タグ毎に色が変更されているのが確認できました!
これで見やすくなったのではないでしょうか。
まとめ
ログの見せ方は少し工夫をすれば見えやすくする方法は様々あると思います。
外部のアセットを導入するなども検討してもいいかと思いますし今回のようにちょっとした方法で改善できる点もあるかと思います。
自分のプロジェクトにあった方法で快適な開発を目指しましょう!
明日は@jesseniqiitaさんです。