Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
31
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

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版へのリンクを冒頭に追加
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
31
Help us understand the problem. What are the problem?