LoginSignup
45
34

More than 3 years have passed since last update.

【Unity】 Debug.LogをTextに表示する

Last updated at Posted at 2018-11-29

TextMeshPro版はこちら

概要

VRの何某を開発するとき、Debug.Logを見るためにわざわざHMDを外すのはめんどくさい!
シーンに配置したUI.TextにDebug.Logを表示して、実機で動作確認しながらログを見たい!
というわけで作りました。
Image from Gyazo

機能

  • Debug.Logの出力をUIのTextに表示する
  • 自動スクロールする(常に最新のログを表示し、古いのは消してゆく)
  • (ON/OFF可)ログの先頭にタイムスタンプをつけて表示する
  • (ON/OFF可)ログの種類(エラー、警告、通常)に応じて色を変える
  • (ON/OFF可)特定の文字列を含むログメッセージは表示しない

使い方

  1. CatchLog.csをプロジェクトに作成
  2. CatchLog.csをTextのオブジェクトにアタッチ
    image.png
  • 特定の文字列を含むログを表示しないようにするには、ignoreのところに文字列を追加します。
    image.png

ざっくり解説

  • Debug.Logの情報を手に入れる
    Application.logMessageReceivedにコールバックを登録しておけば、発行されたログメッセージを色々できます。

    private void OnEnable()
    {
        Application.logMessageReceived += HandleLog;
    }
    private void OnDisable()
    {
        Application.logMessageReceived -= HandleLog;
    }
    
  • 自動スクロール
    Text.text.LengthTextGenerator.characterCountVisible の差分から「Textの範囲からはみ出た文字数」を計算し、このはみ出た文字数が0以下になるようにTextの文字を先頭から行ごとに削除します。

    int truncatedCount = t.text.Length - countVisible;
    var lines = t.text.Split('\n');
    foreach (string line in lines)
    {
        // 見切れている文字数が0になるまで、テキストの先頭行から消してゆく
        t.text = t.text.Remove(0, line.Length + 1);
        truncatedCount -= (line.Length + 1);
        if (truncatedCount <= 0)
            break;
    }
    

参考

履歴

  • 2019-12-29 機能追加、死んだリンクを削除
  • 2020-09-04 TextMeshPro版へのリンクを冒頭に追加
45
34
4

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
45
34