本日はUnityの小ネタ枠です。
UnityのTextMeshProで中国語の簡体字を利用する方法について記事にします。
TextMeshPro
TextMeshProはUnityでテキスト表示を行うためのソリューションです。
docs.unity3d.com
[Text - TextMeshPro]などでTextMeshProを利用する際に、自動でダイアログが開いてプロジェクトにインポートできます。

TextMeshProでインポートされるテキストアセットには中国語の簡体字が含まれていません。
そのままでは中国語の簡体字を入力すると以下のような□文字が表示されてしまいます。

簡体字フォントを準備する
フォントアセットを作成するために、ベースとなる簡体字のフォントを用意します。
今回は以下のフリーフォントを利用してみます。
fonts.google.com
フォントファイルをダウンロードします。
アプリで利用する場合はライセンスがOpen Font License(OFL)であることを確認してください。

展開したファイルに含まれていたttcファイルをプロジェクトにインポートします。

フォントの種類には以下のような種類が存在します。
利用用途に合わせてファイルを選択してください。
| スタイル名 | 数値 (font-weight) | 意味・特徴 |
|---|---|---|
| Thin | 100 | 非常に細い。スタイリッシュだが視認性は低め |
| Extra Light/Ultra Light | 200 | Thinよりやや太いが非常に細い |
| Light | 300 | 軽やかで上品。サブテキストなどに使われる |
| Regular/Normal | 400 | 標準の太さ。通常の本文に最も多く使われる |
| Medium | 500 | やや太め。見出しなどで強調しすぎずに使える |
| Semi Bold/Demi Bold | 600 | Mediumより太い。控えめな強調に使う |
| Bold | 700 | 強調に使う標準的な太字 |
| Extra Bold/Ultra Bold | 800 | 非常に太い。インパクトのある強調用途に |
| Black/Heavy | 900 | 最も太い。タイトルや強い印象が必要な場面向き |
| Variable | 可変 | フォントの重さ・幅・傾きなどを変化させられる形式 |
今回は標準の太さのRegularをインポートしました。
フォントアセットの作成
TextMeshProの機能を利用してフォントアセットを作成します。
メニューから[Window -> TextMeshPro -> FontAssetCreator]を開きます。

[FontAssetCreator]ウィンドウが開くので以下の通り設定を行います。
SourceFontFile:meiryo(準備したフォントファイル) SamplingPointSize:Auto Sizing Padding:5 PackingMethod:Fast AtlasResolution:8192 4096 CharacterSet:Custom Range SelectFontAsset:None Character Sequence:(利用したい文字コードの範囲)

生成されるフォントアセットはファイルサイズが大きくなります。
[AtlasResolution]の値を小さくすることでファイルサイズを小さく調整できますが、フォントの解像度が下がる点に注意が必要です。
今回設定した[8192 4096]の値では生成後のフォントアセットのサイズは80MB前後になりました。

[CustomCharacterList]にはTextMeshProで利用したい文字を全て入力する必要があります。
全ての文字を入力するのは大変なのでUnicodeの中国語領域の0x4E00~0x9FBF(約2万文字)を指定しました。
[Character Set]の設定方法を[Custom Range]に変更して以下の値の範囲を入力します。
19968-40895

設定を完了したら[Generate Font Atlas]を実行し、フォントアセットを作成します。

生成が完了したら最後に[Save as..]でフォントアセットを保存すれば作成完了です。

FontAssetを利用する
作成したフォントアセットをTextMeshProコンポーネントの[FontAsset]に設定します。
これでTextMeshProで中国語の簡体字が利用できるようになりました。

参考ページ
TextMeshProで日本語を利用する
中国語ではなくTextMeshProで日本語を利用したい場合は以下の記事を参照ください。
bluebirdofoz.hatenablog.com