TextMeshProを使った場合のローカライズ設計について

設計

各言語文字列データはなんらかの方法でもってると仮定します。

Global.GetLocalized( str_id )

こんな感じで現在の言語設定におけるidに対応したstringを返す関数はまぁなんか作ってあるでしょう。

この文字列をTextMeshPro(厳密には基底クラスの TMP_Text)に代入すればローカラズ対応ばっちり! というわけにはいきません。世の中のフォントは特定の言語しかサポートしてません。日本語フォントであればアルファベットは対応してるでしょう。しかし中国語は対応してません。結果トウフが並ぶことになります

スポンサーリンク

全言語文字を持つ

ゲームで使っている文字、全言語分事前生成する方法です。

Fallbackのおかげで異なるフォントアセット(まぁこの場合は各言語ごとのフォント)であっても仮想的に一つのフォントアセットとして取り扱うことができます。

弱点は、実質一つのフォントアセットになるため、日本語はmplus, 中国語はnote sansみたいなことができない点です。

動的にフォントアセットを切り替える

各言語ごとに使うフォントを切り替える方式です。こっちの方が一見スマートなんですが、TextMeshProはそういう使い方を想定してないため結構泥臭いやり方です

https://forum.unity.com/threads/trouble-programatically-changing-text-mesh-pro-font.470047/

拡張メソッドを使って、text更新するタイミングで現在の言語設定と異なるフォントアセット&マテリアルが設定されてたら変更するとかになるんでしょうか

なんとTextmeshPro動的切り替え方法ありました