現状のUnityEngine.Debugの問題
皆さんUnityのDebugクラスよく使いますよね? Debug.Log()
とか。
でもたまに不便だな~って思う時ありません?
配列を表示したい時とか
Debug.Log(new string[] {"a", "b", "c"});
↑配列なことぐらいわかってるわ!要素が欲しいんじゃ!
こういう場合はforeachなどで回すか、LINQでゴニョゴニョするとかしか無いんですよね、、、
非常にめんどくさい!!
というわけで作りました。その名もDebugExtentions!
まだ制作途中で、機能が豊富とは言えませんが、一部をgithubに公開いたしましたので今回はそれをご紹介したいと思います。
DebugExtensions機能一覧
・普通のDebugクラスの機能全部(もしかしたら実装漏れがあるかも)
・命名の関係上ClearDeveloperConsole()
→ ClearConsoleError()
になっています。
・多少制限はあるけど、structも表示できます。
・Colorクラスの表示が見やすくなった
・Array, List, HashSet, Dictionary
の要素表示(Format系は対応してないですごめんなさい、、)
・ログのテキスト保存
・コンソール全クリア
・リッチテキストを簡単に使えるぞ
1. Array, List, HashSet, Dictionaryの要素表示
個人的に一番最初に実装したかった機能。
こんな感じで表示されます。
Array・List・HashSet
void Start()
{
string[] wordArray = new[] {
"apple",
"blue",
"cactus",
"default",
"emission"
};
DebugEx.Log(wordArray);
}
実行結果
Array<String>:
[
"apple",
"blue",
"cactus",
"default",
"emission"
] Length = 5
Dictionary
void Start()
{
Dictionary<string, int> dict1 = new Dictionary<string, int>() {
{"normalSword", 5},
{"superSword", 2},
{"apple", 100},
{"water", 1}
};
DebugEx.Log(dict1);
}
実行結果
Array<String, Int32>:
[
{
"key": "normalSword",
"value": "5"
},
{
"key": "superSword",
"value": "2"
},
{
"key": "apple",
"value": "100"
},
{
"key": "water",
"value": "1"
}
] Length = 4
内部ではJsonUtilityを用いているので、Json形式に近い表記になっています。
他に、型情報と要素数も表示してくれる用になりました。
ログに突っ込むだけで簡潔に要素を表示してくれるので、かなり便利です。
2. ログのテキスト保存
DebugEx.RecordStart();
処理
DebugEx.RecordStop();
RecordStart()
とRecordStop()
の間で、ロギングが行われた場合、情報が保存されます。
RecordStop()
が実行されたときに保存されるので注意。
デフォルトではDebugExtensions/Logs
に保存されますが、設定で変えることができます。
3. コンソール全クリア
DebugEx.ClearConsoleAll();
その名の通り、まとめてログを全削除します。
4. リッチテキストを簡単に使えるぞ
"Alpha".Color(Color.red) //色の変更
"Bravo".Bold() //太字にする
"Charlie".Italic() //イタリック体にする
"Delta".Size(12) //文字のサイズを変更する
"Echo".RemoveRichText(); //リッチテキストを取り除く
Consoleではリッチテキストを使うことができるので、string型の変数に上記のようなメソッドを連結することで、リッチテキストに変換することができます。
コンソールの文字をちょっといじりたいときなどに便利です。
5. その他設定
LogSavePath: ログファイルを保存するパス
SaveStackTrace: ログの下の部分にくっついている、呼び出し元のトレース情報をログファイルに書き込むか
コレクションをログで扱うの大変だったので、とても助かりました~