INDIE INDEX

レベル:実践

ゲームの日本語が四角になる|UnityとGodotのフォント設定

公開 2026-10-23更新 2026-10-23

Unity の TextMesh Pro では、Font Asset Creator で作るフォントアセットにはフォントのファイルの文字が自動では入らず、どのフォントアセットにも字形が無い文字は、設定で指定した ID の文字(既定の 0 は四角の枠)になります。Godot では、メインのフォントに字形が無いときの fallback を定義でき、システムフォントも fallback に自動で使われるので CJK の文字を出せますが、制約があります。

このページの目次
  1. 日本語が四角で出るときに、エンジンが見る場所
  2. Unity の TextMesh Pro で日本語が四角になる場所
  3. 静的と動的のフォントアセット
  4. Unity:字形を探す順番
  5. Godot のフォントと fallback の決まり
  6. 日本語が四角になったときに確かめる手順
  7. 失敗を避ける注意
  8. 次に読む
  9. 情報源

日本語が四角で出るときに、エンジンが見る場所

Unity の TextMesh Pro では、Font Asset Creator で作るフォントアセットに、フォントのファイルの文字が自動では入りません。どのフォントアセットにも字形が無い文字は、TextMesh Pro の設定で指定した ID の文字になり、ID の既定の 0 では四角の枠が出ます。Godot では、メインのフォントに字形が無いときの fallback を定義でき、システムフォントも fallback に自動で使われるので、CJK の文字を出せます。ただし制約があり、システムフォントの読み込みに対応する OS は Windows・macOS・Linux・Android・iOS のみです。

エンジンそのものの紹介は、Unity と Godot Engine にあります。TextMesh Pro の項目は、uGUI のパッケージ 2.0.0 の版のものです。

字形が無いときに、フォントの次に探す先

字形が無いときに、フォントの次に探す先1主のフォントUnity はテキストオブジェクトの主のフォントアセット、Godot はメインのフォントです2fallbackUnity はフォールバックのフォントアセット、Godot は Advanced Import Settings で足した fallback と、自動で使われるシステムフォントです3どこにも字形が無い文字Unity は設定で指定した ID の代わりの文字(ID の既定の 0 は四角の枠)、Godot は絵文字なら「tofu」の文字が出ます
図1

Unity の TextMesh Pro で日本語が四角になる場所

TextMesh Pro で日本語が四角になる場所には、たとえば次のものがあります。フォントアセット、Font Asset Creator の Character Set、Atlas Resolution、フォントアセットの置き場、TMP Settings の代わりの文字と Disable Warnings です。

TextMesh Pro で日本語が四角になる場所

場所内容
フォントアセットTextMesh Pro は、Unity のフォントアセットから作る独自のフォントアセットの形式を使います。フォントアセットには、含まれる文字を入れたテクスチャのフォントアトラスと、フォントマテリアルが付きます。空のフォントアセットには、文字が最初は入っていません。
Font Asset Creator の Character Setフォントのファイルの文字は、フォントアセットに自動では入りません。入れる文字を指定します。設定済みの文字集合を選ぶか、入れる文字の一覧を指定するか、既存のフォントアセットかテキストアセットの文字を全部入れます。文字集合の項目には、たとえば ASCII(ASCII の見える文字)・Custom Range(10進の値か範囲で指定)・Unicode Range (Hex)(16進の Unicode の値か範囲で指定)・Custom Characters(文字を続けて並べて指定)・Characters from File(指定したテキストアセットの文字を全部)があります。
Atlas Resolutionフォントテクスチャの幅と高さを、ピクセルで指定します。文字数の多いフォントでは、より大きな解像度か、複数のアトラスが必要になることがあります。数千の文字に対応するときは大きなテクスチャが要り、最大の解像度でも全部が収まらないことがあります。そのときは、複数のフォントアセットに文字を分けられます。
フォントアセットの置き場フォントアセットは、TextMesh Pro が見つけてビルドに含められる特定のフォルダに置きます。Font Asset Creator の保存先は Resources フォルダで、既定のフォルダは TextMesh Pro の設定の Default Font Asset > Path で変えられます。この Path は、Resources フォルダのサブフォルダを指します。元になる Unity のフォントアセット(Source Font File)は、プロジェクトの別の場所で使うか、Resources フォルダに入れた場合を除き、ビルドに含まれません。
TMP Settings の代わりの文字と Disable WarningsDynamic Font System Settings の組に、どのフォールバックにも字形が無いときに使う文字の ID を指定する項目と、Disable Warnings があります。ID の既定の 0 は、四角の枠になります。Disable Warnings を有効にすると、字形が無い文字ごとに Unity が警告をログに出すことを防げます。
表1

静的と動的のフォントアセット

Font Asset Creator で作るフォントアセットは、選んだ文字をフォントアトラスのテクスチャに焼き込みます。動的なフォントアセットは、空のアトラスから始まり、使った文字が自動で足されます。違いを表にします。

静的なフォントアセットと動的なフォントアセットの違い

項目静的動的
文字の入れ方作るときに選んだ文字を、フォントアトラスのテクスチャに焼き込みます。動的より必要な計算資源が少なくて済みます空のアトラスに、使った文字が自動で足されます。静的より多くの計算資源が要ります
元のフォントのファイル作ったあとで、元の Unity のフォントアセットを削除できます元のフォントのファイルへのリンクを保ちます。開発中は、そのファイルをプロジェクトに置いておく必要があり、削除できません。ゲームの動的なフォントアセットの元のフォントは、ビルドに含まれ、ビルドのサイズが増えることがあります
作り方Window > TextMesh Pro > Font Asset Creator で作ります空のフォントアセットは、既定で動的です。Assets > Create > TextMeshPro > Font Asset か、Ctrl/Cmd + Shift + F12 で作ります。既存のフォントアセットは、Generation Settings > Atlas Population Mode を Dynamic にすると動的になります
表2

動的なフォントアセットには、開発中に、焼き込んだフォントアセットに入れ忘れた文字を拾う使い方があります。実行時に、ユーザーがテキスト欄に入力する文字が前もって分からないときの使い方もあります。

Generation Settings の Clear Dynamic Data on Build は、Clear Dynamic Data のメニューと同じように、文字・字形のテーブルとアトラスのテクスチャを消します。さらに、プロジェクトのビルド時とエディタを閉じるときにもデータを消します。有効にすると、ビルドの間にテクスチャを 0 のサイズ(空)にします。動的なフォントアセットでは、グリフアトラス・文字のテーブル・字形のテーブルを初期の状態に戻します。フォントアセットのデータを小さくすることで、ビルドのサイズを減らす働きがあります。

Unity:字形を探す順番

フォールバックは、テキストオブジェクトの主のフォントアセットに字形が無いときに、ほかのフォントアセットを探す仕組みです。たとえば、中国語・韓国語・日本語のように非常に大きな文字集合を持つ言語で、文字を複数のアセットに分ける使い方があります。モバイル端末で、テクスチャの最大サイズが決まっているために、十分な品質の1枚のアトラスに全部の字形が収まらないときの使い方や、ほかの文字体系の特殊な文字をテキストに入れる使い方もあります。

フォールバックのフォントアセットには、フォントアセットごとの一覧と、プロジェクトのすべての TextMesh Pro のフォントアセットに当たる一般の一覧があります。前者はフォントアセットのプロパティ、後者は TextMesh Pro の設定で指定します。フォントアセットが自分の一覧を持つときは、その一覧が先に探されます。

TextMesh Pro が字形を探す順番は、次のとおりです。

TextMesh Pro が字形を探す順番

順番探す先設定する場所備考
1テキストオブジェクトの主のフォントアセットテキストオブジェクトのプロパティ
2Fallback Font Assets(Primary font assets)フォントアセットのプロパティプロパティに並んでいる順に探します。検索は再帰で、各フォールバックのフォールバックも含みます
3テキストオブジェクトの Sprite Assetテキストオブジェクトのプロパティ欠けた文字の Unicode の値と同じ値を割り当てたスプライトを探します
4General Fallback Font AssetsTextMesh Pro の設定一覧に並んでいる順に探します。検索は再帰で、各フォールバックのフォールバックも含みます
5Default Sprite AssetTextMesh Pro の設定欠けた文字の Unicode の値と同じ値を割り当てたスプライトを探します
6Default Font AssetTextMesh Pro の設定
7Missing glyphs character(代わりの文字)TextMesh Pro の設定
表3

フォールバックの検索は循環参照を検出し、連鎖の中の各アセットは1回だけ探されます。TextMesh Pro の設定の Fallback Font Assets の一覧は、+ と - でフォントの枠を足したり減らしたりし、左側のハンドルをドラッグして並べ替えます。

Godot のフォントと fallback の決まり

Godot のフォントの決まりには、たとえば次のものがあります。既定のフォント、フォントの形式、fallback の足し方、システムフォントの対応 OS と PCK との関係、絵文字の tofu です。

Godot のフォントと fallback の決まり

項目内容
既定のフォントフォントの指定は、テーマエディタ、Control ノードの Inspector の Theme Overrides > Fonts、テーマの Inspector の Default Font の3か所でできます。どこにも指定が無いと、Open Sans SemiBold がプロジェクトの既定のフォントとして使われます。
フォントの形式動的(.ttf・.ttc・.otf・.otc・.woff・.woff2)と、ビットマップ(BMFont の .fnt 形式か、等幅の画像)の2種類があります。動的なフォントは、ベクターのため、ビットマップのフォントに比べて多くの字形を含められます。
fallback の足し方メインのフォントに表示する字形が無いときのために、fallback を1つ以上定義できます。たとえば、ラテン文字だけに対応するフォントを使いながら、キリル文字など別の文字体系のテキストを別のフォントで出す使い方があります。フォントのファイルの Advanced Import Settings の Fallbacks で足します。既定のプロジェクトフォントを使いながら足すときは、Base Font プロパティを空のままにして fallback を足します。
システムフォントSystemFont リソースで、フォントを実行時に読み込めます。フォント名(Arial など)か、システムの標準的な既定のフォントに対応する別名を指定できます。複数のフォントを指定すると、上から順に探して、システムで最初に見つかったフォントが使われます。エンジンはシステムフォントを fallback に自動で使うので、独自のフォントを読み込まなくても CJK の文字と絵文字を出せます。ただし制約があります。システムフォントの読み込みに対応する OS は、Windows・macOS・Linux・Android・iOS のみです。Android には公式の API が無く、Godot はシステムの設定ファイルを解析します。この設定ファイルは Android のベンダーが変更することがあり、システムフォントの読み込みが動かないことがあります。システムフォントはプロジェクトに import されず、実行時に読み込まれます。そのためフォントは書き出した PCK ファイルに入らず、書き出したプロジェクトのファイルサイズが小さくなります。プロジェクトと一緒に配布すると許諾の問題が起きる独自のシステムフォントも、プロジェクトに同梱されないので、その問題を避けられます。
絵文字の tofu絵文字を出すには、使うフォントか、その fallback のどれかに絵文字が入っている必要があります。入っていないと、絵文字は出ず、代わりに placeholder の「tofu」の文字が出ます。
表4

日本語が四角になったときに確かめる手順

  1. Unity:テキストオブジェクトの主のフォントアセットの Character Table に、四角になった文字が入っているかを確かめます。Font Asset Creator で作るフォントアセットには、フォントのファイルにある文字が自動では入りません。
  2. Unity:入っていない文字は、静的なフォントアセットなら、Font Asset Creator で Source Font File を選び、Character Set で文字を指定してから Generate Font Atlas をクリックし、Save か Save as... で Resources フォルダに保存します。動的なフォントアセットにするなら、Generation Settings > Atlas Population Mode を Dynamic にします。動的にすると、元のフォントのファイルがビルドに含まれ、ビルドのサイズが増えることがあります。
  3. Unity:それでも四角のときは、フォントアセットの Fallback Font Assets の一覧に、日本語の字形を持つフォントアセットがあるかを確かめます。続けて、Project Settings の TextMesh Pro で、General Fallback Font Assets の一覧も同じように確かめます。どのフォールバックにも字形が無いと、設定で指定した ID の文字になります。既定の 0 は四角の枠です。
  4. Godot:四角になったテキストを出している Control ノードの Inspector の Theme Overrides > Fonts、またはテーマの Default Font で、どのフォントが指定されているかを確かめます。どこにも指定が無いと、Open Sans SemiBold が使われます。
  5. Godot:フォントのファイルを FileSystem ドックでダブルクリックして Advanced Import Settings のダイアログを出します。右のサイドバーの Fallbacks で Array[Font] (size 0) をクリックして広げ、Add Element をクリックします。新しい要素の矢印から Quick Load か Load で、日本語の字形を持つフォントのファイルを選びます。
  6. Godot:フォントのファイルを足さずに CJK の文字を出すときは、システムフォントが fallback に自動で使われます。システムフォントの読み込みに対応する OS は、Windows・macOS・Linux・Android・iOS のみです。Android では動かないことがあり、Linux ではディストリビューションごとに入っているフォントが違います。

失敗を避ける注意

動的なフォントアセットは、元のフォントのファイルがビルドに含まれ、ビルドのサイズが増えることがあります。静的なフォントアセットは、作ったあとで元の Unity のフォントアセットを削除できます。TextMesh Pro のフォントアセットは、Resources フォルダの中の決まった場所に置きます。TextMesh Pro が見つけてビルドに含められる場所だからです。

フォントは著作権の対象で、すべてのフォントが、ライセンスを買わずに商用に使えるわけではありません。システムフォントは、フォントごとに寸法(metrics)が違うので、あるプラットフォームで長方形に収まるテキストが、別のプラットフォームでは収まらないことがあります。Linux では、システムに入っている既定のフォントがディストリビューションによって違い、同じフォント名や別名でも、表示されるフォントが変わることがあります。Android のシステムフォントの読み込みは、公式の API が無いため、ベンダーの変更で動かないことがあります。

フォントのライセンスと、ゲームに入れる表記は、ゲームに入れるライセンス表記の書き方にあります。

次に読む

ゲームに入れるライセンス表記の書き方

情報源

このページに出た言葉

このページの内容の誤りは、問い合わせの窓口で受け付けています。