7
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をTextMeshProに表示する

概要

以前作成した『【Unity】Debug.LogをTextに表示する』のTextMeshPro版です。
TextMeshPro及びTextMeshProUGUIのどちらにも使えます。

Unity Package Manager経由のインポートは下記URLから。MITライセンスです。
https://github.com/udonba/Unity-LogPrompter.git?path=Assets/LogPrompter

Image from Gyazo

機能

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

【Unity】Debug.LogをTextに表示すると同じ)

導入

  1. Package Managerウィンドウを開き、Add package from git URL...から下記URLを入力してLogPrompterをインポートします。
    https://github.com/udonba/Unity-LogPrompter.git?path=Assets/LogPrompter
    image.png

  2. LogPrompter.csをTextMeshPro(またはTextMeshProUGUI)のオブジェクトにアタッチ
    image.png

使い方・注意

  • 特定の文字列を含むログを表示しないようにするには、Ignore Phrases に文字列を追加します。
    image.png

  • TextMeshProに付属してくるフォントアセット(LiberationSans)は日本語を表示できないため、
    日本語を表示したい場合は『UnityのText Mesh Proアセットで日本語を使うときの手順』等を参考にフォントアセットを作成しましょう。

解説

  • 自動スクロール
    新しいログを文字列の末尾に追加し、古いログを文字列の先頭から削除することでスクロールさせます。

  • TMP_Text.ForceMeshUpdate()
    これをやらないとうまくいかないので、文字列を操作する前にやっておきます。
    image.png

  • 枠からはみ出しているかの判定
    firstOverflowCharacterIndex プロパティから、はみ出した最初の文字のインデックスを取得できます。
    LogPrompterではこれが-1かどうかではみ出しているか判断します。
    下図で言うところの水色の×印がついているSが、firstOverflowCharacterIndex から逆算した文字です。
    image.png
    このインデックスはテキスト文字列のインデックスでなく、TMP_TextInfoクラスのcharactorInfoフィールド(配列) のインデックスです。「<color=red></color>」などはcharactorInfoには含まれないため、textMeshPro.text[firstOverflowCharacterIndex] のように使えないことが多いです。

  • はみ出したログの数をカウント
    枠に文字列が綺麗に収まるよう文字列の先頭を削除するために、はみ出した部分の文字列が何個のログでできているかカウントします。
    ところが、TextInfoには元の文字列の情報が残されていないので、はみ出した文字がどれか分かっても、それが元の文字列のどこに当たるかを知るすべがありません
    そこで、やや力業ですが… charactorInfo内の改行コードでログ数をカウントします。元のログに改行コードが含まれていなくても、TextMeshPro.textに展開する際に自分で改行コードを付加しているので、逆算的にログ数が分かります。
    image.png

参考

履歴

  • 2020-09-04 作成
  • 2021-08-19 Unity Package Manager対応

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
7
Help us understand the problem. What are the problem?