【Unity】TextMeshProで日本語を表示する方法

Unity

TextMeshProでデフォルトで用意されているフォントは日本語を使えないため、テキストで日本語を使いたい場合は、日本語に対応したフォントを用意し導入する必要があります。
既に何人もの先人達が方法をまとめているので、調べればすぐわかる内容ですが、筆者なりにあらためてまとめていこうと思います。

なお本記事での使用環境は以下の通り。

・Unity 2022.3.31f1
・URP

導入手順

1.日本語フォントの用意

まずはじめに日本語に対応したフォントをダウンロードする必要があります。
今回記事ではGoogle Fontsから日本語フォントをダウンロードして使用します。
Google Fontは基本無料・商用利用可能なWebフォントのサービスです。 ※ 2024/6/3時点

サイトへ行ったら、お好みの日本語に対応したフォントを選んでダウンロードしましょう。
なお記事では「Noto Serif Japanese」を選択しました。

ダウンロード先にzip形式でファイルがあるので、右クリックから任意の場所に展開しましょう。展開されたフォルダの「static」の中にフォントファイルがあります。

↑ダウンロードしてきたフォントファイル一覧

フォントファイルはいくつか存在するので、中から使いたいフォントを選びましょう。記事内では「NotoSerifJP-Regular」を使います。使いたいフォントを選択したら、Unityで日本語テキストを使用したいプロジェクトを開き、Project内に選択したフォントファイルをドラッグ&ドロップしましょう。
なお、記事では[Assets]⇒[TextMesh Pro]⇒[Fonts]内にフォントファイルを追加しました。

2.Font Assetの作成

フォントの用意が終わったら、次はFont Assetの作成に入っていきます。
まずはUnityエディタの上部にあるメニューから[Window]⇒[TextMeshPro]⇒[Font Asset Creater]と順に選択していきましょう。

Font Asset Createrウィンドウを開いたら以下のように設定を変更します。

変更項目

・Source Font File:手順1で追加したフォントファイル
(記事の場合は「NotoSerifJP-Regular.ttf」)
・Atlas Resolution:両方「8192」に設定
・Character Set:Custom Charactersに設定

↑変更後の画面

Font Asset Createrの設定が終わったら、次はCustom Character Listに使用する文字のデータ(今回の場合、ひらがなやカタカナ、漢字など)を入れていきます。

文字データに関しては、GitHub Gistで提供してくれている方がいるので、そちらを使用させていただきます。以下のURLから「Download ZIP」を押してzipファイルをダウンロードしてください。
日本語文字コード範囲指定(ascii・ひらがな・カタカナ・第一水準および第二水準(JIS-X0208-1997)に含まれる漢字) · GitHub

ダウンロードが完了したら、zipファイルを任意の場所に展開しましょう。展開されたフォルダ内に「japanese_full.txt」というテキストファイルが確認できると思います。メモ帳などのテキストエディタでファイルを開くと以下のように文字がびっしりと書かれているはずです。

確認出来たらこの文字を全選択してコピーし「Custom Character List」のボックスにペーストしましょう。
「Custom Character List」にコピーした文字をすべて入れたら「Generate Font Atlas」ボタンをクリックします。

終わったら、下部に現れる「Save」を押して、Font Assetをプロジェクト内に保存します。

今回記事では、[Assets]⇒[TextMesh Pro]⇒[Resources]⇒[Font & Materials]に保存しました。

3.作成した日本語のFont AssetをTextMeshProに設定

Font Assets Createrでの作業が完了したら、TextMeshProに作成したFont Assetを適用していきます。やり方は簡単で「TextMeshPro」コンポーネントの「Font Asset」という項目に作成したFont Assetを設定すればOKです。

あとは実際にテキストボックスに日本語のテキストを入力して、きちんと表示されているか確認してみましょう。

↑無事日本語が表示されました

一部の文字が表示されない場合

1.文字化けの理由

晴れてテキストに日本語を入力できましたが、使用するフォントによっては一部の文字が文字化けする場合があります。例えば今回記事で使用したフォント「NotoSerifJP-Regular」では、漢字の「岸」を入力しようとすると文字化けを起こします。

↑「海岸線」と入力した例。「岸」の文字だけ表示されない

「NotoSerifJP-Regular」フォントはどうやら、「岸」という文字には対応してないようです。

↑Google Fontsで入力した例。こちらも「岸」という文字のみ文字化け

このように、使用するフォントによって一部の文字のみ使用できない場合があります。

2.対応策

対応というと語弊があるかもしれませんが、単純にその文字を使わないようにするというのが対応の一つとして挙げられます。結局使わなければその文字が文字化けしてしまおうが関係ないので。

しかし今回の例のように使う場面がありそうな文字の場合や、どうしてもその文字を使用するという場合は、その文字に対応した別のフォントを改めて探してFont Assetを作成するしかなさそうです。(もし他に対応策があれば教えてほしい…)

おわりに

以上、簡潔ではありますがTextMeshProの日本語対応についてまとめてきました。日本向けにゲームを制作する場合、ほぼ確実に日本語テキストを使用すると思うので、なるべく手順を覚えておきましょう。

コメント

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