tanaka's Programming Memo

プログラミングについてのメモ。

TextMeshPro向け ASCIIコード+JIS第1水準の文字

TextMeshProを使う時にフォントアセットを作成します。その際に使える限りの文字を定義してくださっているありがたいファイルが公開されてはいるのですが、容量食うし、テスト段階ではほどほどのやつでいいのです。ざっと探したのですが見つからなかったので自作しました。

※2020/7/1 ~を追加しました

※2020/6/25 半角スペース、全角スペース、©記号を追加しました

◆ココを開いて、Rawボタンをクリックして、表示されたテキストを全てコピーしてTextMeshProのFont Asset CreatorCustom CharactersCustom Character Listのところに貼り付けてご利用ください。

以下の文字セットで、約3,580文字です。

  • ASCIIコード(0x21~0x7F)
  • 記号、英数字、かな(01区~08区)
  • 第1水準漢字(16区~47区)

ほぼ全ての日本語を利用したい場合は、@kgsiさんのUnityのText Mesh Proでほぼ全ての日本語を表示させる - Qiitaをご覧ください。

フォントアセットの作成

Sampling Point Size48、というのを見ますが、大きな文字を使わないメッセージ用のフォントなどにはそれほど解像度が高い必要はないように思います。Render ModeにSDFAAが追加されてフォントアセットの作成速度が爆速になったので、一度、Sampling Point SizeAuto Sizingで作成してみて、その値を使うのがよさそうです。

設定例

まずは以下の設定で試してみるとよいと思います。

  • Sampling Point Size
    • Auto Sizing
  • Padding
    • 5
  • Packing Method
    • Fast
  • Atlas Resolution
    • どちらも2048
  • Character Set
    • Custom Charactersにして、Custom Character List欄に、上記のRawでコピーした文字列を貼り付け
  • Render Mode
    • SDFAA
  • Get Kerning Pairs
    • チェック

以上でGenerate Font Atlasボタンを押してフォントアセットを作成して、完成したらSaveボダンで保存します。

これで表示してみて、文字が粗く見える場合は、Atlas Resolutionの一方を4096にして再生成して確認して、まだ駄目そうならどちらも4096にして生成する、という流れがよいかと思います。

本番用

基本設定は省メモリのままで、以下だけ変更します。

  • Sampling Point SIze
    • 試作した時に表示されるPoint Size
  • Packing Method
    • Optimum

以上でGenerate Font Atlasボタンを押してフォントアセットを作成して、完成したらSaveボダンで保存します。Optimumは生成に時間がかかるので、Sampling Point SizeAuto Sizingでやるとめちゃくちゃ時間がかかります。Fastの時に確認したサイズを設定するのがよいでしょう。

まだ解像度が足りない場合

一辺が4096を越えるとフォントアセットのサイズが巨大になる上にスマホなどで動かない機種が出てくると思います。使用する文字を確定した後に、それらの文字だけを含めたフォントアセットを作成することを検討するとよいと思います。

文字一覧の作り方概要

JISコードで欲しい範囲をループで回して、 http://unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT のファイルから対応するUnicodeを取り出して、文字表示するツールをVisual C#で書きました。

参考URL