こちらの記事は内容が古くなっています。最新の記事をご覧ください。
↓
テストであれば全ての日本語をアセットに含めてもいいのですが、読み込み速度を上げたり、アプリサイズを小さくしたい場合、使われている文字だけを登録したくなると思います。
ここではその、使われている文字だけをテキストやエクセルから抜き出してくれるツールの紹介です。
ダウンロード
使い方
特定のファイルや、フォルダ(内のファイル全て)を対象として使われている文字を抜き出し、出力します。
出力ファイルは各言語で分けたい場合もあるので、いくつでも登録可能になっています。
enable extensions
文字を抜き出すファイルの拡張子を選んでください。
特に考える必要がなければ、そのまま全てにチェックをつけておけばOKです。
4つの拡張子以外も増やしたい場合は、ソースコードの exts を増やしてください。
static string[] exts = new string[] { ".xls", ".txt", ".log", ".cs" };
group
チェックを外すと、そのグループのテキスト吐き出しを抑制することができます。
output char(txt)
抜き出した文字を出力するファイル名を、パスも含めて記述してください。
import path
使用文字を抜き出したいファイル、またはフォルダを指定してください。
フォルダを指定した場合、フォルダ内の全てのファイルにたいして処理が行われます。
(その際、enable extension 外のファイルは無視されます)
エクセルの場合存在する全シートを走査し、文字を抜き出します。
大きなファイルだと時間がかかるかもしれません。
+ / ー
グループを増減します。
Create
テキストを出力します。
エラーがあった場合 [FAILED] と表示され、コンソールログに情報が表示されるので確認してください。
吐き出されたテキストは TextMeshPro - FontAssetCreator へ
Character Set を Characters from File にして、吐き出されたテキストを Character File にドラッグしてください。
ASCII + 第1水準よりはるかに少ない容量でフォントを作成することができると思います。
有名な小説「吾輩はにゃー」の文字数は?
ここからは蛇足ですが、興味がある方はどうぞ。
まず、日本語の全ての文字でフォントを作成します。
ちなみに、私が持っている日本語全部盛りテキストは 7488 文字でした。
もっとあるのかもしれませんが、これで文字化けしたことはないので、今回はこれを使います。
文字のサイズは 40、テクスチャは大盤振る舞いで 4096 x 4096 で作ってみましょうか。
足りない。Excluded characters の 507 文字分が入りきらなかったようです。
仕方ないのでポイントサイズを 38 くらいにして…。
こんな感じで作ったフォントサイズは 36MB。
個人レベルで難しいこと考えたくなければ、アリかなぁ? なサイズでしょうか。
吾輩はにゃーで試してみる
青空文庫からテキストをお借りして、どのくらいの文字数が使われているか確認します。
かなり昔の小説なので、今よりも漢字を多く使っていることでしょう。
3081文字。意外と漢字数多くないですね、テクスチャすっかすか!
4096 x 2048 でも十分でした。フォントサイズは 17MB。
なろう小説はどうだろう?
文体も、内容としてもゲーム寄りなテキストでも試してみましょう。
こちらは完成した作品ではありませんが、テキストにして 40000 行以上の文章。
2176文字。にゃーより1000文字くらい減りましたね!
2048 x 2048 でギリギリ入りそうで入りませんでした…おしい。
ポイントサイズを少し下げて 2048 x 2048 に入れれば、9MB くらいになります。
フォントはたとえ空欄があろうと、Atlas Resolution のサイズが適用されますので、4096 x 2048 だとフォントサイズはあまり変わりません。
テキスト多めのゲームで大体2500文字前後、テキスト少な目のゲームだと1000文字前後になると思います。使っている文字だけを選別できれば、かなりロスを減らせるのではないでしょうか。
フルでも 36MB だしいいよ! と思っても、繁体・簡体・韓国語なんてマルチリンガルにしてたら 100MB 超える可能性もありますから…。
アジア圏はなんでこんな文字数多いんだろう
主人公名をつけられるゲーム、という足枷
わかったようなこといってるんじゃないよ、主人公の名前がつけられるゲームだと、文字がなかったりするとクレームの対象なんだよ。
こんな声が飛んできそうです。こういう場合、どうすればいいでしょうか?
漢字名をつけられなくする
ひらがな、カタカナだけなら文字数少なくて済むでしょ? と仕様面でなんとかするのも、自作ゲームならアリアリですよね。
そもそもマルチリンガルの場合、漢字のよさなんてどこかへ吹っ飛んでしまうのですから…。
Dynamic SDF を検討する
日本語に愛のあるクリエイターもいます。また、そもそも自分はいちプログラマーで、名前の文字に何を使うか考えるポジションではない、なんて事もあるでしょう。
この場合、Dynamic SDF を検討してみるといいのではないでしょうか。
otf(ttf) をゲーム内に含めるためライセンス問題はきちんと考える必要がありそうですが、どんな文字も使えるという利点があります。