日本語フォントが化けないようにする方法

ゲームエンジン

Unityで日本語を扱う際、標準ではASCII文字しか扱えず日本語などのマルチバイト文字を表示させようとすると文字化けしてしまいます。対処方法としてはマルチバイトに対応したフォントアセットを作成しTextMeshProに指定します。

文字化けとは

文字が正常に表示されず□になっている状態を文字化けと言い、白い四角なので豆腐と言ったりします。昔からある俗称ではありますが、どうやら海外でもTOFUと言うようです。他の表現は…やめておきます…。

ダミーテキスト。多数の文字が重複した状態。

フォントアセットの作成手順

初めに、使用する文字に対応したフォントを準備しUnityエディタにドラッグアンドドロップします。商用アプリの場合はフォントのライセンスに注意してください。

メニューの[Window]-[TextMeshPro]-[Font Asset Creator]をクリックしツールを表示します。

Source Font Fileで取り込んだフォントを指定します。

フォントアセットを作成するためのツール

ゲームで使用するすべての文字列をCustom Character Listにコピペし、[Generate Font Atlas]ボタンをクリックすると使用されている文字の分析が行われます。

入力する文字列は次のGitHubで公開されているものを使っても良いです。ですが、フォントアセットのサイズがかなり大きくなりますので、ゲームのファイルサイズに制約がある場合は制作するゲーム内の文字に絞って生成することをお勧めします。

入力した文字列は約7万文字でしたが、一意の文字は974種類でした。2文字はフォントに含まれない物の様です。何が欠落したかCharacters missing from font file:に書かれていますが、文字コード10(0x0A)と13(0x0D)はそれぞれLFとCRの改行コードなので問題ありません。

画面の左下にある[Save]ボタンをクリックしフォントアセットを保存します。

文字列を表示するオブジェクト(TextMeshPro)のFont Assetに作成したフォントアセットを指定します。

文字化けが解消したら完了です。

タイトルとURLをコピーしました