(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

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は複数設定可能なので、

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

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


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

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

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