はじめに
UnityのTextMeshProで日本語を表示したいという方は多いと思います。
しかし、TextMeshProのデフォルトのフォントアセットは日本語は含まれておらず、ひらがなや漢字を表示しようとすると文字化けしてしまいます。
日本語を表示するためにはフォントファイルを用意して自身でフォントアセットを作る必要があります。
フォントアセットはTextMeshProに同梱されているFontAssetCreatorを使用して作ることができますが、フォントアセットを作成する際に必要になるのが文字セットです。
この文字セット作成が「くせもの」で、文字化けを回避しようとJIS 第1水準、第2水準など日常的に使用されているものを全て収録すると膨大な量が必要になり、フォント表示に必要なテクスチャサイズが無駄に大きくなります。
(しかも大半は使ってないとか・・・)
その上JIS規格は古いので、こんな漢字知らねーよ、というものが多数含まれていたり、逆にゲームなどの創作でよく見る漢字だけど第2水準までに含まれていないなどの文字も多々あります。
本来であれば、プロジェクトで使用している文字種を精査し、必要な文字だけでフォントアセットを作るというのがベストではあります。
ただ、プロジェクト内の全てのTextやTextMeshPro、その派生のコンポーネントなどをすべて探して、文字列を調べて・・・てやるのはぶっちゃけ面倒くさい。
その上、シーン上だけではなくprefab化されていたり、Excel等の外部ファイルやScriptableObjectから文字列を与えている場合など、プロジェクトの規模が大きくなるほど把握が難しくなります。
じゃあどうする?
上記問題を解決するためにプロジェクトに含まれる文字列を精査するツールを作ってみました。
下記から無料でDLできます。
起動すると下記のようなウィンドウが展開されます。
使い方は簡単で、ツールを起動して左側のテキストボックスに、内容を精査したいファイルやフォルダをドラッグ&ドロップするだけです。
対象の拡張子は現在下記となっています。
*.unity
*.asset
*.prefab
*.xlsm、.xlsx、.xls
*.txt
*.csv
例えば下記のようなExcelファイルをドロップすると
この↓ような結果を得ることができます。(すべてのシートを精査します)
また、下記のようなSceneを構成し、.unityファイルをドロップすると
この↓ような結果を得ることができます。
シーンファイルにもともと含まれるアルファベットや記号等も含まれますが、数自体は多くないので大きな問題にはならないかと思います。必要あれば手動でカットしてください。
他にもマスターデータをScriptableObjectで保持している場合にはインスタンスの.assetファイルをドロップすれば設定されている文字を取得することもできます。
注意点
1.処理時間
プロジェクトフォルダをドロップすればOK!・・・のつもりで作成しましたが、
当然巨大なプロジェクトになっていると相応の時間がかかります。
2.既存のフォントアセットを含まないように
すでに実装されているフォントアセットが含まれている場合、そのフォントアセットを作成した時の文字セットをそのまま読み取ってしまうので、その点ご注意ください。
こんな文字実装した覚えがない!という場合は処理対象にフォントアセットが含まれているかをチェックいただくとよいかと思います。
3.テキストボックスの内容は自動でクリアされない
プロジェクト内のファイルを探しながら1つずつドロップする方もいると思い、テキストボックスは処理された文字列をクリアせず順次追加していきます。
内容をリセットしたい場合には上部のクリアボタンを押してください。
さいごに
最後までお読みいただきありがとうございます。
FontAssetCreatorで作成するテクスチャが大きいのはそれなりの課題だと思っていたので、個人的には便利に使えるのではないかと思っています。
よろしければみなさんも便利に使ってください。
コメント