はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】TextMeshProのFontAsset作成手順(ビットマップフォントにFallbackでダイナミックフォントを利用)

はじめに

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

f:id:hanaaaaaachiru:20220125013829p:plain
ビットマップフォントとダイナミックフォント

そもそもビットマップフォントダイナミックフォントってなんやねんという方はこちらの記事が分かりやすいと思います。
Unityにおける文字の描画と比較検証 | CyberAgent

また追々紹介していきますが、以下の画像のように二つのフォントを活用していきます。

f:id:hanaaaaaachiru:20220125013444p:plain
フォント利用の流れ

フォントの準備

今回はおたもんさんが配布してくださっているフォントを活用させていただきます。

okoneya.jp

また今回の手法を用いた場合、再配布に該当する可能性大なので注意してください。

最低限の日本語に対応したstaticなFontAssetを生成する

まずはビットマップフォントを用いて、事前に比較的用いられる日本語に対応したテクスチャを生成しておきます。

Unityにおける文字の描画と比較検証 | CyberAgent

メニューバーよりWindow -> TextMeshPro -> Font Asset Creatorを選択します。

f:id:hanaaaaaachiru:20220125002350p:plain
Font Asset Creatorを開く

以下の設定でFont Assetを作成。

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

Dynamic Fontを作成する

先程作成したビットマップフォントに含まれない文字は、ダイナミックフォントを活用して描画したいと思うので作成を行います。

やり方は簡単で、フォント(今回は.otf)ファイルを右クリックしてCreate -> TextMeshPro -> Font Assetを選択します。

f:id:hanaaaaaachiru:20220125004604p:plain
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。テクスチャに文字が収まりきらなかったら、自動で新しいテクスチャを用意・利用してくれる。神機能。
f:id:hanaaaaaachiru:20220125005328p:plain
Generation Settingsを設定する
f:id:hanaaaaaachiru:20220125013829p:plain
ビットマップフォントとダイナミックフォント

Fallback Font Assets

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

f:id:hanaaaaaachiru:20220125010601p:plain
Fallback Font AssetsにDynamicFontを設定する

TextMeshProのフォントとして設定する

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

f:id:hanaaaaaachiru:20220125010931p:plain
TextMeshProのFontAssetを設定する