UnityのText Mesh Proで表示できない文字を非表示にする方法です。
Unity2020.3.15f2
TextMeshPro 3.0.6
はじめに
TextMeshProでは、デフォルトでは表示できない文字は□で表示されます。
また一部の結合文字など特殊な文字もうまく処理できず、□が表示されてしまうことがあります。
例えば©️(コピーライトマーク)を表示しようとすると以下のようになります。
本記事では、このように表示できない文字を非表示にする方法についてまとめます。
結合文字などの特殊な文字を削除する
まず一つ目の方法として、結合文字などの特殊な文字を判定して削除する方法があります。
以下はuGUI Textにおける例ですが、Text Mesh Proでも同じように処理することができます。
ただしこの方法では、「特殊な文字ではないがフォントに存在しない文字」は□で表示されてしまいます。
表示できない文字を削除せず非表示にする
二つ目は表示できない文字を削除せずに非表示にする方法です。少しHackyな方法になります。
まずText Mesh Proでは、表示できない文字=□を他の文字に置き換えることができます。
これはProject Settings > TextMesh Pro > Settings > Missing Character Unicode
から指定できます。
ここにはUnicodeを10進数で指定します。
例えばAという文字=65313を指定すると、©️は以下のように表示されます。
このAを幅がゼロの空白文字にできれば、表示できない文字をすべて非表示にできそうです。
そこでまず、架空の空白文字を作ります。
Window > TextMesh Pro > Font Asset Creator
を開いて、以下のような設定で適当に一文字だけ入れたアトラスを作ります。
フォントも文字もなんでも大丈夫です。
こうしてアセットを作成したら、次にそのアセットのInspectorを表示します。
Character Tableに先程の文字が入っているので、UnicodeをFFFFFFに、Scaleをゼロに設定して架空の文字を作成します。
このアセットを、通常のフォントとして使用しているアセットのフォールバックとして設定します。
あとはMissing Character Unicode
に16777215(FFFFFFの10進数)を設定するだけです。
ついでにその下のDisable warnings
もオフにしておくと、表示できない文字が入力されても警告が出力されなくなります。
これで表示できない文字を削除せず非表示にすることができました。