Unityのデフォルトのフォントを使っていると、日本語が文字化けします。
これを防ぐには、Google Fontsなどのフォントを予めインストールしておく必要があります。
導入はこちらの手順が詳しいです。
が、いくつか設定ミスをして詰まったので、その解消手順をまとめます。
起こったこと
Font assetがうまく生成されない
問題&原因
Fのマークのファイル(図では上部の81...から始まるファイル)ができて欲しいのに、生成結果が別種のファイル(図ではupdate...から始まるファイル)になって、フォントをセットできない。
→Font Asset Creator(TextMeshPro)を選ぶ。
解説
|
| これ。 |
TextとTextMeshProという2種類があり、後者のFont Asset
Creatorを使う必要がある。別種ファイルができたのは、Textの方のFont Asset
Creatorを使ってしまったせい。
まぎらわしいので注意。
まぎらわしいので注意。
assetが一瞬で生成されるが、ほとんどの文字が登録されていない
問題&原因
Generate Font
Atlasをクリック後、一瞬でフォント生成されるが、ゲーム内で表示しても正しく出ない。
→Characters form fileでなく、Custom Charactersにして、実際に使う文字を全部ペーストして生成する。
解説
Characters form fileを使うと高確率でこの現象が起きたので、(おそらく)生成文字対象がうまく選定されていないのでは、と考えられる。
ASCIIなど、英数字しか生成しないような内部設定になっており、日本語フォントの生成が全部無視され、一瞬で終わっている可能性がある。
なので、文字を全部ペーストするのが確実。
文字がモザイクのかかったようにぼける
問題&原因
生成したフォントを反映したら、謎にぼやけてしまう。
→Atlas Resolutionの設定値を大きくする(8192など)。
解説
Atlas
Resolutionをデフォルトの512x512にして生成していた。これを8192に上げたら、無事にうまくいった。
※ Atlasについて、補足
フォントアセットを作成する際、選択したフォントファイルから必要なすべての**文字の図形データ(グリフ)を抽出する。Atlasとは、Texture atlasの略で、このグリフ一つ一つを、一枚の大きな正方形のAtlasに効率よく並べたもの。テキストを表示する際には、該当の文字部分だけを切り取って表示される仕組みになっている。
生成はできたが謎の文字化けを起こす
問題&原因
生成したフォントを反映させると、謎の文字化けを起こす。
→Atlasを大きくするか、文字数を減らす。
解説
8192で作ると、あまりにファイルサイズが大きいので、4096に落として生成したらこのようなことになった。
Atlasが小さすぎて収まりきらないことで、文字グリフの割り当てがずれて、グリフテーブルの参照先がおかしくなっているらしい。
Atlasが小さすぎて収まりきらないことで、文字グリフの割り当てがずれて、グリフテーブルの参照先がおかしくなっているらしい。
今回使った文字データの中には、絶対に使わないだろうという文字も多数含まれていたので、それを大幅に削ることで、4096でもAtlasを正しく生成できた。
動的な入力システムなどがないなら、実際使う文字だけに絞れば、もっと小さなAtlasにし、容量削減できるはず。
※assetのサイズ比較
7267文字 x Atlas 8192 → 生成結果のassetサイズ: 137.8 MB
3795文字 x Atlas 4096 → 生成結果のassetサイズ: 35.4 MB
8192x8192(約 6700万ピクセル) から4096x4096 (約1600万ピクセル)
に解像度を落とした結果、データサイズが1/4になった。
どのAtlasを使うのかが大事。
文字数が少ないほど小さなAtlasでパッキングできるので、なるべく文字数を減らすと◎。
文字数が少ないほど小さなAtlasでパッキングできるので、なるべく文字数を減らすと◎。
文字の周りにうっすらと四角形が出る
問題&原因
フォント生成時、paddingを0にしていた。
paddingを5%にして再生成したら解決。
参考: 【Unity / TextMeshPro】Outlineで透明な背景が出る現象とその対処法【備忘録】
解説
TextMesh Proでは、アウトラインやシャドウなどのエフェクトを描画するために、文字の周囲に余白を確保する必要があり、これが不足していると、エフェクトがFont Atlasの境界で切り取られ、透明な背景が描画される場合があるらしい。
まとめ
![]() |
| 無事出てよかったね |
も〜〜〜〜大変!!!
行き詰まってこうしてブログにまとめるたびに、経験値が溜まっていく感じがあるのはいつものことですね。
行き詰まってこうしてブログにまとめるたびに、経験値が溜まっていく感じがあるのはいつものことですね。
これでもう、Unityの日本語フォント生成には迷わないぞ!!









コメントを投稿
別ページに移動します