はじめに
今回はビットマップフォントとダイナミックフォントの両方を活用したFontAssetの作り方を紹介したいと思います。

そもそもビットマップフォントとダイナミックフォントってなんやねんという方はこちらの記事が分かりやすいと思います。
Unityにおける文字の描画と比較検証 | CyberAgent
また追々紹介していきますが、以下の画像のように二つのフォントを活用していきます。

最低限の日本語に対応したstaticなFontAssetを生成する
まずはビットマップフォントを用いて、事前に比較的用いられる日本語に対応したテクスチャを生成しておきます。
Unityにおける文字の描画と比較検証 | CyberAgent
メニューバーよりWindow -> TextMeshPro -> Font Asset Creatorを選択します。

以下の設定でFont Assetを作成。
- Sampling Point Size : Auto Sizing。テクスチャにどれくらいの文字の大きさで書き込むか。
- Packing Method : Fast。時間がかかってしまうが、Optimumの方が理想ではある。
- Atlas Resolution : テクスチャの大きさ。これによって容量が変わる。大きければたくさん文字を書き込んだりできるが、それだけメモリ消費・アプリサイズが増加することに注意してほしい。
- Character Set : Custom Characters。こちらの文字を利用。
- Render Mode : SDFAA。

Dynamic Fontを作成する
先程作成したビットマップフォントに含まれない文字は、ダイナミックフォントを活用して描画したいと思うので作成を行います。
やり方は簡単で、フォント(今回は.otf)ファイルを右クリックしてCreate -> TextMeshPro -> Font Assetを選択します。

作成したFont Assetを選択し、インスペクターよりGeneration Settingsを以下のように設定してください。
- Atlas Population Mode : Dynamic。staticならビットマップフォントで、dynamicならダイナミックフォント。
- Atlas Render Mode : SDFAA。これ一択。
- Atlas Width, Atlas Height : 1024。大きすぎるとメモリの余分な余白で無駄なメモリが消費される可能性。小さすぎると文字があまり入らない。
- Multi Atlas Textures : ON。テクスチャに文字が収まりきらなかったら、自動で新しいテクスチャを用意・利用してくれる。神機能。


Fallback Font Assets
最初に作成したビットマップフォントのFont Assetのインスペクターから、Fallback Font Assetsを設定することで、ビットマップフォントに含まれない文字を描画しようとするときにダイナミックフォントを活用するように設定できます。

TextMeshProのフォントとして設定する
最後にTextMeshProのフォントに、Fallbackを設定したビットマップフォントを指定してあげればOKです。
