C#
Unity
OculusGo

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

参考