うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Text と TextMeshPro の違い

Text と TextMeshPro の違いを同じ機能の部分のみ簡単にまとめる

UI 表示

TextMeshPro のフォントはズームしてもきれいに表示され
文字の周りをぼかすには Font の SoftNess を変更すればばかすこともできる

f:id:hacchi_man:20200627160749p:plain:w300

Font Atlas

Text

Text の Font Atlas は表示された分だけ記載され
文字サイズが異なった場合でも別のテキストとしてフォントアトラスに書き込まれる

例えば5から5刻みでText を表示させた場合は以下のように複数同じ文字が書き込まれています

f:id:hacchi_man:20200627160008p:plain

UIのテキストサイズが統一されていない場合 FontAtlas のサイズが大きくなってしまう可能性がある
そのため Text を利用する際にはできるだとフォントサイズを決めてUIを設計すべきである

TextMeshPro

事前に FontAtlas を書き出し、Shader でよしなに表示してくれているので FontAtlas のサイズが大きくなることはない
しかし、FontAtlas に予め登録していない文字を表示させることができないため、英数字のみなら手軽だが日本語のように
必要な文字の種類が多い場合は結構無駄が多くなる

一応フォールバックの FontAtlas を指定することができるが、そちらも必要な文字を書き出す必要があるので手間には変わりない

f:id:hacchi_man:20200627160503p:plain

文字色

TextMeshPro はグラデーション表示できる以外は機能に変わりはない

以前記事にもしたが、Text でも拡張をすれば同じようにグラデーションカラーの文字にすることができる
hacchi-man.hatenablog.com

Shadow

Text

Text に Shadow をつけるなら Shadow コンポーネントをつける
これは今表示されているテキストを複製し、頂点カラーによって色を変え座標を変更することで Shadowにしている

f:id:hacchi_man:20200627161140p:plain:w300f:id:hacchi_man:20200627161155p:plain:w300

そのため、文字数が増えるに従って頂点数が増えていくので大量に文字を出す場合に利用してしまうと負荷が問題になってくる

TextMeshPro

Shadow を出すのは Shader側で行っているため、影を出したとしても頂点が増えることが無い
そのため、文字が増えてたとしても Text と比べて影響は小さい

f:id:hacchi_man:20200627161415p:plain:w300

Outline

Text

Text の Outline は Shadow と似たようなもので、同じ文字を4回描画することで Outline に見えるようにしている
参考画像ではわかりやすいように、ずらす範囲を大きくしている

f:id:hacchi_man:20200627161757p:plain:w300

この Outline は4回の描画のみではきれいに見えないことがあり、さらに Outline コンポーネントを追加する場合がある
Outline が2個ある場合 4 × 4 で 16回も追加で描画してしまうことになる

f:id:hacchi_man:20200627161922p:plain:w300f:id:hacchi_man:20200627161959p:plain:w300

そのため、Shadow よりも考えて利用する必要がある

TextMeshPro

Shadow と同じく Shader側で Outline の処理を行っているため、負荷が小さい

f:id:hacchi_man:20200627162202p:plain:w300

しかし、文字の枠を内側にも塗りつぶしてしまうため、Text と同じ見た目にならない場合もある

f:id:hacchi_man:20200627162311p:plain:w300