テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unity4のダイナミック(or システム)フォントを使う

Unity4からdynamic fontがサポートされた。

ダイナミックフォント自体は過去のプラグインでサポートされているが、これはエディターで確認するさいに「Unity Pro」を要求するので、Unity Proを保持していない自分には非常に使いにくいシステムだった。

[Unity3D]Unityのモバイル環境でダイナミックフォントを使う
ttp://terasur.blog.fc2.com/blog-entry-229.html

Unityのdynamic font(ないしsystem font)は、Unity4から追加されたフォントを管理するシステムで、フォントを動的にレンダリングして文字を表示することができる。そのため、アプリサイズを小さくする上では非常に有用になる。

ちなみにfontを設定しない場合は、システムフォントを使用することができるらしい。ただし、自前でフォントを用意しないということはHTML5のように機種依存と戦う事になるので、その辺りは注意だと思う。例えばフォントでレイアウトが盛大に崩れたり(画面外に文字が飛んで行ったり)、対応しないフォントが表示されなかったり(太字とか)。

その代わりフォントの規約に引っかからないし、サイズも多少(300kbくらい)小さくできるので、そこはケースバイケースで。


■文字をレンダリングする

dynamic fontでは文字を動的にレンダリングする。といっても、単純に毎回描画していたのでは間抜けなので、一度テクスチャに描画し、そこから再取得を行う。なので一度レンダリングした文字は再利用するので高速で動作する。逆を言えば、使ってない文字を使用する場合はオーバーヘッドが多少なりとも入る。この違う文字とは「大きさの異なる同じ文字」も含まれるので、そこは注意。

このオーバーヘッドについてだが、基本的には誤差レベルの負荷なのであまりきにしなくても良いが、致命的に重いタイミングが存在する。それが「テクスチャを再ビルド」したタイミングで、textureRebuildCallbackイベントで検知できる。

この再ビルドは、2つのルールで実行管理される模様。

1.使用してない文字を削除して再ビルド
2.1を適応してもテクスチャのサイズが足りない場合、
  テクスチャのサイズを大きくして再ビルド


■使い方

使い方は簡単、使うフォントのCharacter Typeをdynamicにするだけ。
この設定を使用しているフォントは、テクスチャを動的にレンダリングし使用することができる。

スクリーンショット 2013-01-11 1.07.30

後は、GUITextとかTextMeshのフォントをdynamicを設定したフォントに変えるだけ。


■システムフォントの場合

システムフォントはもっと単純に使用出来る。
使い方は、GUITextやTextMeshで指定しているFontの値をNoneにするだけ。値が指定されていない場合は、実行時に判定して使えるフォントを自動的に割り当てる。

ちなみにテクスチャ(マテリアル)は、MeshRendererコンポーネントから取得できる。