以下の内容はhttps://kan-kikuchi.hatenablog.com/entry/TMP_Fallback_Font_Assetsより取得しました。


Font Assetを変えずに言語ごとにフォント変える【Unity】【TextMesh Pro】




この記事でのバージョン
Unity 2022.3.21f1


はじめに

UnityのTMP(TextMesh Pro)はFont Assetでフォントを指定するので、


言語によってフォントを変えたい場合はこれ変える必要があります。

さすがに言語分のTMPオブジェクトを作って切り替えるのは面倒ですし、

Font Assetを切り替えるコンポーネントを作っても、そのコンポーネントの付け忘れがありえます。


と言う事で今回はFont Assetを変えずに言語ごとにフォント変える方法の紹介です!


Font Assetを変えずに言語ごとにフォント変える方法

まずフォントはなんでもいいので、ベースとなるFont Asset(今回はBase SDF)を

何の文字も設定せずに作り、Staticにします。

つまり、何の文字も表示出来ないフォントアセットを作る感じで、これをTextMesh Proに設定します。


これだけだと文字を表示できないので、Font AssetのFallback Font Assetsを使います。


Fallback Font AssetsはそのFont Assetにない文字を、他のFont Assetで表示するという機能です。



つまりベースのフォントは何も表示できない→Fallback Font Assetsに設定されたフォントを使う

という流れにし、このFallback Font Assetsを言語ごとに切り替えるというイメージです。


具体的なプログラムは以下のような感じです。

/*_baseFontも_targetFontもTMP_FontAsset*/

//ベースのフォントアセットのFallback Font Assetsをリセット
_baseFont.fallbackFontAssetTable.Clear();

//アトラスリセット
_baseFont.ClearFontAssetData();
_targetFont.ClearFontAssetData();

//現在の言語のフォントアセットをFallback Font Assetsに設定
_baseFont.fallbackFontAssetTable.Add(_targetFont);


ちなみにFallback Font Assetsは複数設定可能なので、

例えば日本語のフォントをベースに、中国語用、韓国語用と

足りない文字のフォントアセットだけ追加していけば良さそうに見えますが、


これをやると日本語のフォントに含まれるのはそちらが使われてしまうので、

「日本にもある漢字は日本語のフォントなのに、中国の漢字は中国のフォント」

みたいな歪な感じになって、結構使うのが難しかったりりします。






以上の内容はhttps://kan-kikuchi.hatenablog.com/entry/TMP_Fallback_Font_Assetsより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14