Notifications
Article
ダイナミックフォントとビットマップフォントについて
Updated a year ago
1.1 K
0
設定について
Unityのフォントは、ビットマップフォントとダイナミックフォントの二系統があります。
設定は、Inspector上のCharacterで変更が可能です。
CharacterがDynamicの時はダイナミックフォント、それ以外の時はビットマップフォントになります。

ビットマップフォントについて

例えば下記の様な形でビットマップフォントを利用したとします。
このようなTextureファイルを事前に生成します。文字を描画する時には、こちらのTextureから切り貼りして描画することで文字の描画を実現しています。
ビットマップフォントの場合は、使用されうる文字を事前にTextureへと焼きこんでおいてそれを使用します。
そのため、事前に焼きこんで置いた文字以外は正しく表示されません。
また文字のサイズ変更は、事前に生成したTextureから拡大縮小をすることで実現しています。そのためフォント側の設定したFontSize以外のサイズで描画した場合、拡縮による粗さが出てきます

ダイナミックフォントについて

たいしてダイナミックフォントは、事前にテクスチャを作成しません。
実行中にTextureの作成を行う形になっています。実行中に二つのステップを踏むことでフォントの描画を実現しています
ステップ1.必要な文字を Textureに焼き付けます
描画する必要な文字を列挙します。その後、アプリ内に埋め込まれたフォントデータを利用して Textureをアプリ実行中に生成します。
ステップ2.作成したTextureを元に文字を描画します。
ステップ1で生成したTextureから切り貼りすることで、実際にフォントを画面に出しています。

比較について

ビットマップフォントの良いところ
  • 事前に生成されたTextureを利用するので動作は早い
  • フォントデータ自体をアプリに含まなくて済む
ビットマップフォントの悪いところ
  • 事前に想定される文字を考えて入れておかないといけない
  • 使用する文字数が増えれば増えるほど、テクスチャの容量が増加
  • フォントサイズは、ビットマップデータの拡大縮小で実現するので表示が粗くなります。
ダイナミックフォントの良いところ
  • アプリに必要な文字を事前に列挙しておく必要がない
  • 使用する文字数が増えても、容量が増加しない
  • フォントデータを利用して描画するため、拡大・縮小されてもきれいな描画が出来ます
ダイナミックフォントの悪いところ
  • 実行中にTextureの生成を行うため、その分動作が重い
  • フォントデータ+実際に描画する文字列の二つをメモリ上に置くので、メモリを圧迫する
  • フォントデータ自体がアプリに含まれます
昔の話をしますと、ビットマップフォントを利用した形で文字を描画することが多かったです。(名前を付けられたとしても平仮名・カタカナ等決められた文字しか使用できない事も多かったです。)
しかし最近のゲームでは、ユーザーがキャラクターの名前を自由に設定出来たり、チャット機能が出来たりとしてきて、ダイナミックフォントでの利用が多くなっております。

文字の色変えについて

文字の色を変えるのは Shader側で行っております。そのため、文字の色ごとにTextureの生成は行われません。

TextMesh Proについて

TextMesh Proでは手法としては、ビットマップフォントの手法で描画しています。
ただUnity標準のビットマップフォントと違い、Distance Fieldという技術を利用することで拡大・縮小に強いフォント描画を実現しています。
Distance Fieldの参考URL : https://hexadrive.jp/lab/demo/610/
Tags:
YusukeKurokawa (黒河 優介)
Developer Relation Manager/Engineer - Programmer
7
Comments