Edited at

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


概要

Oculus Goのアプリを開発するとき、Debug.Logを見るためにわざわざHMDを外すのはめんどくさい!

シーンに配置したUI.TextにDebug.Logを表示して、実機で動作確認しながらログを見たい!

というわけで作りました。

様子


機能


  • Debug.Logの出力をUIのTextに表示する(新しいログは改行して追加)

  • ログがTextの範囲を超えたら古いログを削除して、新しいログが見えるように調整する。新陳代謝

  • Textにスクリプトをアタッチするだけで使える


使い方



  1. CatchLog.csをプロジェクトに作成

  2. CatchLog.csをTextのオブジェクトにアタッチ
    DragDrop


ざっくり解説



  • Debug.Logの情報を手に入れる

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

    private void OnEnable()
    
    {
    Application.logMessageReceived += HandleLog;
    }
    private void OnDisable()
    {
    Application.logMessageReceived -= HandleLog;
    }



  • ログがTextの範囲を超えたら古いログを削除して、新しいログが見えるように調整する

    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;
    }



参考