10
2

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 1 year has passed since last update.

N高等学校 (1)Advent Calendar 2020

Day 19

【Unity】Debug機能を便利にしたい!DebugExtensions

Last updated at Posted at 2020-12-18

現状のUnityEngine.Debugの問題

皆さんUnityのDebugクラスよく使いますよね? Debug.Log()とか。
でもたまに不便だな~って思う時ありません?

配列を表示したい時とか

    Debug.Log(new string[] {"a", "b", "c"});

image.png
↑配列なことぐらいわかってるわ!要素が欲しいんじゃ!
こういう場合は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();

image.png

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. その他設定

image.png

LogSavePath: ログファイルを保存するパス
SaveStackTrace: ログの下の部分にくっついている、呼び出し元のトレース情報をログファイルに書き込むか

コレクションをログで扱うの大変だったので、とても助かりました~

10
2
0

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
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?