当ページのリンクには広告が含まれています。
【簡単】TextMeshProで日本語が□に文字化け?アトラス生成不要&多言語対応のフォント設定!

Unityでゲームを作っていて TextMeshPro で日本語を使おうと思った時、もしくは「多言語対応(ローカライズ)」をしようと思ったとき、TextMeshProのフォント設定でつまずいていませんか?
めんどくさいアトラステクスチャの生成や、Font Asset Creatorを使った複雑なフォント作成、さらには文字を切り替えるための専用スクリプティング……実はこれら、しなくても大丈夫なんです!
今回は、もっと手軽に・簡単に TextMeshPro を多言語対応させる方法をご紹介します。
ローカライズの方法
多言語対応する場合、Unity公式の「Localization」パッケージを使用するのが基本です。
日本語だけで十分な場合は、Localizationは不要なのでフォント設定へスキップ!
1. Localizationパッケージをインストールする

上部のメニューから Window > Package Manager を開きます。左側のメニューから「Unity Registry」を選択し、一覧から Localization を探してインポートします。(バージョンは最新のもので大丈夫です)
2. Localization Tablesで翻訳データを作成する

上部メニューから Window > Asset Management > Localization Tables を開き、新しいテーブル(String Table)を作成します。

ここに日本語や英語などの言語ごとに対応する文字列を入力していくのですが、データが多くなるとUnity上での入力は大変になります。
そのため、メニューにある Export / Import機能を使ってExcel(CSV形式)で一括入力・編集する のが圧倒的に簡単でおすすめです!
TextMeshProにローカライズを適用する

シーン内にあるテキスト(TextMeshPro)のインスペクターを開きます。
TextMeshProコンポーネントの右上にある ⋮(縦3点リーダー)アイコン をクリックし、メニューから 「Localize」 を選択します。

すると自動的に Localize String Event がアタッチされるので、あとは先ほど作成したテーブルの「キー」を String Reference に指定してあげれば設定完了です。
フォント設定

しかし、これだけだと「フォントの文字化け(豆腐化)」という壁にぶつかります。
英語フォントのまま日本語や中国語を表示しようとすると、文字が表示されず四角いブロックになってしまうのです。
これを最も簡単に解決する方法が、次に紹介する「フォントのFallback(フォールバック)機能」を活用した設定です!
TextMeshProでローカライズに対応したフォントを用意する
それぞれの言語の文字を正しく表示させるための下準備をします。ここでは、汎用性が高く無料で使える「Noto Sans」を例に進めます。
1. 必要なフォントを用意する
ベースとなる英語用フォントと、対応させたい言語のフォントファイルをUnityプロジェクトに取り込みます。
以下のフォント(Google Fonts)がオススメです!
- Noto Sans (メインのフォント)
- Noto Sans Japanese (日本語フォント)
- Noto Sans Korean(韓国語フォント)
- Noto Sans Simplified Chinese(中国語簡体フォント)
- Noto Sans Traditional Chinese(中国語繁体フォント)
その他の言語のフォントも、こちらのページから探せます!
それぞれのフォントをダウンロードして解凍したら、NotoSans-Regular.ttf をUnityプロジェクト内(Assets/fonts など)にインポートします。
ちなみに、可変フォント(NotoSans-VariableFont_wdth,wght.ttf)には太字などのデータも含まれていますが、Unity側で Regular でも自動的に太字を表現できるため、容量の軽い NotoSans-Regular だけを用意すれば十分です!
2. SDFフォントアセットを作成する

プロジェクトウィンドウで、取り込んだ各フォントを選択し、右クリック → Create → TextMeshPro → Font Asset → Create SDF を選択します。これだけで、それぞれの言語のフォントアセットが一瞬で作成されます。

3. Fallbacks(フォールバック)を設定する
Fallbacks とは、メインのフォントに「表示したい文字」が含まれていない場合、指定した代わりのフォントリスト(JPやKRなど)から自動的にその文字を探して表示してくれる機能です。

先ほど作成したメインのフォントアセット(NotoSans Regular SDF)を選択し、インスペクターを開きます。
Fallback List という項目を探し、+ ボタンを押して、リストの中に作成した NotoSans JP SDF や KR、CN などの別言語フォントアセットを追加していきます。
完成!

この設定をしておくだけで、メインのフォント(NotoSans Regular SDF)が追加した他言語の文字にも対応するようになります。
ゲーム内で言語が切り替わった際、ベースのフォントが勝手に追加言語のフォントを参照してくれるため、スクリプトでフォントを切り替える処理を書く必要はもうありません!

フォントアセットの Atlas Population Mode が Dynamic になっていると、ゲームの実行中に画面へ表示された文字が自動的にフォントアセットへ追加されていきます。
あらかじめ膨大なテクスチャを焼き込んでおく必要がないため、アセットサイズやメモリ管理の手間を大きく軽減できます。
(※ただし、巨大なフォントを扱う際は、実行時のパフォーマンスやビルドサイズに注意しつつ、必要に応じてStaticでの事前生成やグリフの制限も検討してみてください)
まとめ
Unityの Localization パッケージと TextMeshPro のフォントフォールバック機能を組み合わせることで、複雑なスクリプトや面倒なアトラス生成を行うことなく、スムーズに多言語対応を実装できます。
ぜひ本記事の手順を参考に、あなたのゲームでも多言語対応に挑戦してみてください!