はじめに
今回は指定した文字だけをフォント(TextMeshPro)に入れて、無駄な容量を削減する方法についての記事になります!
私はずっとTextMeshPro
のFont Asset Creator
を利用してフォントのアセットを作成して利用していました。
このFont Asset Creator
ではCustom Range
やCustom Charactor
を利用して指定した文字だけをアセットに含めることができます。
しかし、ふとその作成されたアセットをみてみると、全く容量が削減されていないことに気づいてしまったのです。
追記)これはAtlas Resolution
を設定していないことが原因でした。この記事の後で紹介をします。
これはかなりビックリだったのですが、これではないちゃんと容量を削減できる方法を見つけましたので、紹介をしたいと思います。
フリーソフトを使う
容量を削減しようと思ったとき、TextMeshProのフォントのアセットを作成する前から指定した文字だけを含めればよいことに気づきました。
それを実現するためには、サブセットフォントメーカーというフリーソフトを使うことで簡単にすることができます。
追記)これとほぼ同様の機能が既にUnityに備わっているようです。詳しくはこの記事の後半をご覧ください。
またWindows版とMac版の両方があるので、安心ですね。
指定した文字だけを含むフォントを作成する
まずはサブセットフォントメーカーを起動しましょう。
作成元のフォント、作成後のフォント、フォントに格納する文字を記入後、作成開始を押します。
すると私の場合、4232kB→5kB
まで容量を削減することができました。
TextMeshProのフォントのアセットの容量を削減する
上の方法ではフォント自体の容量を削減できたのですが、実はTextMeshPro自体に指定した文字だけを含む機能が備わっています。
追記)フォントにもCustom set
という指定した文字だけを入れる機能があるみたいです。さきほどのフリーソフトは使わなくとも大丈夫かもしれません。
指定した文字だけを含むには、Custom Charactor
を使うことでできます。
ただこれをしただけでは文字を指定していないときと同じ容量のアセットが作成されます。
その理由はAtlas Resolution
を変更していないからです。
TextMeshProでは使用する文字を1枚の画像ファイルにする(アトラス化)するようです。
なので、いくら文字を減らしても画像ファイルの大きさを変化させなければ容量に変化はないというわけですね。
これを踏まえてAtlas Resolution
を変更してみましょう。
Atlas Resolution
のデフォルトが512*512で、すべてのASCII文字を含める、つまり128文字ぐらいが入ると書かれていました。
ただここはかなり感覚的で、どれが適切かを見極めるのは難しいかもしれません。もし詳しい方がいましたら、コメント等で教えていただけると嬉しいです。
私の場合、2048*2048→126*126でフォントを作成したところ、32777kB→40kB
の削減になりました。
さいごに
書きながら間違いに気づいたりを何度もしてしまったので、かなり見にくい記事になってしまって申し訳ありません。
もし時間があれば、簡単な手順をまとめた記事を書きたいと思います。