はなちるのマイノート

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

【Unity】TextMeshProのフォント用のアセットに指定した文字だけを入れて容量を下げる手順

はじめに

今回はTextMeshProのフォント用のアセットに指定した文字だけを入れて容量を下げる記事になります!

TextMeshProを利用している場合、Font Asset Creatorを使って.TTFなどのフォントのファイルから独自のアセットに変換をします。

ただこのアセットは日本語対応をすると、数十MBになってしまうこともよくあります。

もしIOSのアプリでは、100MB以上ではWi-Fiを繋がなかったりと条件があったりするので、フォントで容量を食うのはなるべく避けたいところです。

その容量を減らす対策として、今回はアセットに入れる文字を減らす方法を紹介をしたいと思います。

普通に常用漢字を含めたアセットの場合

今回は例としてアプリ明朝体を使っていきたいと思います。

まずはフォント(.otf)をUnityにインポートします。ちなみに日本語な名前はFont Asset Creatorではバグる可能性が高いので、英語の名前にしておいたほうがよいでしょう。

f:id:hanaaaaaachiru:20190606110226p:plain

以下のサイトの設定で、常用漢字を含む日本語のアセットを作成してみました。
UnityのText Mesh Proアセットで日本語を使うときの手順 - Qiita

この場合の容量は、32,777kBと表示されているので、32MBという結果になりました。

f:id:hanaaaaaachiru:20190606110339p:plain

Font Asset Creatorの設定を変更する

ここから指定した文字のみを入れて、容量の削減をしたいと思います。

自分で使う文字を指定する場合は、Charactor setCustom Charactorsにして、Cuntom Charactor Listの中に使う文字のみを打ち込みます。

f:id:hanaaaaaachiru:20190606111043p:plain

ただこのままアセットを作成しても実は容量は変わりません。

これはTextMeshProの独自アセットの生成方法に理由があるのですが、TexeMeshProでは使用する文字を1枚の画像ファイルにする(アトラス化)ことでアセットを作成しています。

なので、いくら入れる文字を減らしても画像ファイルの大きさが変化させなければ容量は変わらないのです。

この画像ファイルの大きさを変えられるのが、Atlas Resolutionです。

日本語の設定では4096*4096または2048*2048を使うことが多いと思いますが、これを減らすことで劇的に容量を減らすことができます

ただこのAtlas Resolution、デフォルトの512*512で、すべてのASCII文字(128文字)を含められるという情報以外を見つけられませんでした。

またSampling Point Size(font size)という画像に収めるときのフォントの文字の大きさも関係するので、一概にこれが良いとはいえません。

なので、最終的には実際に作成をしてみて最小の設定をみつけるしかないと思います。

さらにSampling Point Size(font size)Auto Sizingにすると自動で全ての文字を収まるようにしてくれるので、うまく活用するといいでしょう。

私はこのような設定でアセットを作成してみました。

f:id:hanaaaaaachiru:20190606112836p:plain

結果

以上のことをすると、32,777kB → 141kBに削減することができました!

f:id:hanaaaaaachiru:20190606113029p:plain

問題の実際の見た目ですが、ほとんど違いはないように見えました。

f:id:hanaaaaaachiru:20190606113434p:plain

さいごに

アプリで使う文字のみを入れることで、かなりの容量を削減することができました。

簡単に今回の内容をまとめると、

  • 容量の大きさはAtlas Resolution
  • 文字の綺麗さはSampling Point Size(font size)

をうまく設定することがキーだと思います。

ぜひ自分なりの設定を見つけてみてください!