TestMeshProで日本語フォントを作成する(2020.3.11f1)

TextMeshPro でフォントを作成する方法のうち、久しぶりに作業すると手順を忘れがちのフォント作成手順と設定値の意味のメモです。

確認環境

今回の確認環境は以下の通りです。

  • Unity 2020.3.11f1
  • Windows 10
  • TMP Importer で Import TMP Essentials 済み

フォント作成手順

まず生成したいフォントを Unity にインポートしておきます。

今回の例では、あまずさ鴒さんのM+A1を使用することにします。

いつものようにファイルを D&D して Unity に取り込みます。

次に Window > TextMesh Pro > Font Asset Creator で作成用のウインドウを表示します。

Source Font File

作成したいフォントファイルを D&D する。最初にインポートしたファイルを設定します。

Sampling Point Size

アトラスに書き込む1文字の大きさ。

Auto SizingAtlas Resolution に収まるように自動設定してくれる。自動の場合アトラスのサイズによって小さくなりすぎることがあるので中。Custom Size は大きさを自分で設定。ただし Atlas Resolution に入らないと文字が切り捨てられる。

どちらも 30 ~ 45 くらいにしておけばモバイル端末上のメッセージ表示程度でおかしい感じはしない。画面いっぱいに表示する文字などは 70 ~ 90 にした方が無難。めったに使わないけど大きい文字の時は大きいサイズが無難。

Padding

変更しない。4のまま。大きいアウトラインを利用する場合は4より大きい値を指定する。フォントのエッジを出してくっきり表示したい時は 2などより小さい値を指定する。

Packing Method

アトラスへの文字のパック(並べ方)方法。Fast は作成が相当早いがちょっとサイズが大きくなる?Optimam は生成速度が超遅いけど少し小さくなる(と言うけどそんなに小さくならない。文字数が多いと数時間以上かかるけど長時間待つ程の事も無いのかもしれない)ので Fast でよさそう。

Atlas Resolution

作成するアトラスの大きさ。使用する文字数による。使用する文字が収まるように大きさは調整する。JIS 第一水準以下の文字数であれば20462 or 40962 よい。縦・横は同じサイズにする。

ちなみにアセットのサイズが 20482 だと 9.5MB、40962 だと 35MB、81922 だと 133MB くらいになるのでリポジトリに何個も Push すると大変なことになるので気を付ける事こと。

Character Set

自作の文字セットを使用するので Character from file を選ぶ。

Character File

自分用に作った以下のファイルを使用する。

Gist

ローカルに charset.txt (UTF-8) などで保存して Unity にインポートしておく。半角・全角英数字 + 常用漢字、一部記号で2433文字。一部の使用頻度の低そうな文字と記号を削ったオリジナルの文字セット(ちょっと難しい漢字が無い)第二水準まで全部入り!8000文字!は使わない部分が多くて過剰な感じなので最初は小さく作って不足したら足していく方が良さそう。ユーザーからの文字入力が無ければ。

通常の文字(絵文字とかじゃない)ので Hex すると後から何を指定したのか意味が分からなくなるので文字を書いたファイルを参照する。

Render Mode

SDFAA。***_HINTED は品質が良くないので選ばいこと。

品質は、SDFAA < SDF16 < SDF32 らしいけど文字数が多いと順に生成に時間が相当かかる。Optimum がやばいけど SDF32 と組み合わせるとやばい。もしやるなら寝る前か。たぶん起きても終わってないけど…あとメモリを10G単位で開けておかないと途中で処理に失敗する。だけど6インチくらいの画面だとどれも大差なさそう。Editor上ですごく拡大すると少し違う。

以下生成サンプル。エディタに64ポイントで配置。

どれも見た感じ違いがほぼ無いので2048でも大丈夫そう。

アウトラインとかの効果の入り方を見るに境界の認識は少し違うっぽい。やっぱりフォントサイズが大きい方が細かく認識しているのできれいにつく、ただしスマホの小さい画面に表示したら区別つかないのはいっしょかな。

Get Kerning Pairs

そのままチェック入れておく。

ここまで設定したら「Generate Font Atlas」を押してアセットを生成する。

生成が完了したら「Save」、その場で作り直したら「Save As」。

なんか保存の挙動がおかしいかも?一度保存した後ウインドウを開きっぱなしでSaveAsで別名で保存してもされない??開きっぱなしで作り直したら新しいフォルダを作って別のフォルダに旦保存したほうが手順として安全っぽい。

あとは生成したアセットをTextMeshProに設定して使用する。

そのほか

Material Preset の新規作成

フォントのマテリアルを選択 > インスペクターのアイコンを右クリック > コンテキストメニューの Create Material Preset で作成。フォントは同じで色とかアウトラインを変えられる。色変えたいだけでフォントごと複製は容量が倍増するので非推奨。

ドット絵のフォント

いい感じになる設定方法をまとめました。

takap-tech.com

参考

困ったら以下を見ればだいたい解決する

Unity Indies - [unity2019.LTS] Text Mesh Proで日本語マスター

テラシュールブログ - 【Unity】TextMeshProのMaterial Presetを増やす方法