見出し画像

TextMesh Pro のセットアップ手順

Boltで TextMesh Pro を使うメモを書こうとしたら、TextMesh Pro のセットアップだけで結構な長さになったので分離。
(うまい牛丼を作るのに牛から育成するみたいな。牛のエサからの場合もある。エンジニアあるある)

以前 TextMesh Pro を使ったのはUnity公式に取り込まれる前くらいだったので、復習も兼ねてメモ。


初心者にこそ是非使ってほしい

TextMesh Pro はうまく使えば簡単に GUIの見栄えを良くできるので、Unity初心者ほど是非使ってもらいたい機能です。

ただ TextMesh Pro、高機能故にとっつきにくい点は否めません。
初心者でも根気よくやればできるので、是非トライしてみてほしいです。


フォントを用意する

TextMesh Pro で使うフォントを用意します。
今回は M+FONTS を選定。
前から無料&商業可でしたが、近年ライセンスが微変更されてライセンス表記も不要となりました。勿論ゲームにも使用できます。

以下のサイトを開きます。
https://ja.osdn.net/projects/mplus-fonts/releases/

いくつかありますが、今回はその中の mplus-TESTFLIGHT-063a.tar.xz をクリックしてダウンロードします。

画像7

ちなみにファイル名の ~TESTFLIGHT~はその名の通りでExperimental的な意味なのですが、言い換えると最新版なのでコレでいいです。文字フォントの「不具合」というのは、文字のバランスとかデザイン的要素が主なので、ソフトウェア上の動作に支障が出ることはまずありません。稀に一部の文字が欠落してるとか文字コードがズレてるとかありますけどね。

Windows系の人には見慣れない拡張子のファイルかもしれませんが unix系の圧縮ファイルです(Linux とか MAC な人は説明不要だと思うので割愛。tarも色々あるので)。
自分のPC環境で展開できない場合は以下の 7zip という圧縮展開ソフトをインストールして展開して下さい。最近のPCなら 64ビット x64(Windows) のものを選ぶと良いです。
https://sevenzip.osdn.jp/

展開すると拡張子が tar のファイルができるので、再度それも展開します。
フォルダ名 mplus-TESTFLIGHT-063a 下に、拡張子が ttf のフォントファイル(True Type Fontファイル)がズラっと出てきます。

今時は7zipですよ。ZIPよりもパスワード暗号化強度が高かったり、圧縮率も高かったりします。特にテレワークでファイル転送で秘匿性を気にするなら 7zip 推奨します。


Unity でTextMesh Pro の準備

今回は Unity 2019.4.0f1 を使用しています。
(古いUnityはTextMesh Proが諸々違うので注意)
Unityで新規プロジェクトを作成、又は既存プロジェクトを開きます。

メニューバーから、
Window > TextMeshPro > Import TMP Essentisl Resources

ダイアログが出るので、Import ボタンをクリック。
Projectウィンドウ内に /Assets/TextMesh Pro ができます。


Unityにフォントをインポート

UnityのProjectウィンドウ内の、/Asset/TextMesh Pro/Fonts/
先程展開したフォントのフォルダ mplus-TESTFLIGHT-063a を ドラッグ&ドロップ。
下図のようになります。

画像1

普通は必要なフォントのみを入れれば良いですが、ここでは後から色々試せるように丸ごと放り込んでます(富豪プログラミング万歳?)。


TextMesh Pro で使用する文字コードリスト

この後に、

・読み込んだフォント(ttf形式)から TextMesh Pro のアセットを作成する

のですが、その際に作成対象とする「文字コード」を指定するリストが必要になります。

例えば TextMesh Pro で「こんにちは」と表示する場合は、あらかじめこの5文字「こ」「ん」「に」「ち」「は」を指定する文字コードリストを使って、対応するアセットを生成しておく必要があります。

正直この辺が TextMesh Pro の使いにくさ、わかりにくさの元凶です。詳細な管理ができる点では有用なのですが(もう少し自動化/半自動化できると良いのですが)。
まぁ手順を覚えればどうということはないです。

今回はとりあえずJIS第一水準分くらい(約2000文字位)の文字一覧を用意して、まるごとTextMesh Pro 用アセットを作ります。

なぜいちいちそんなことをする機能があるのか?というのはアセットの容量を節約する為です。特に日本語は文字種が多いので(漢字約5000文字以上、平仮名、カタカナ)。最終的なゲームで使用される文字(平仮名、漢字等)は全文字種の中のほんの一部な為、その文字だけをアセット化する、という機能です。
が、どの文字を使うかなんてゲームが完成しないとわかりません!
昨今のPCは高性能なので約2000文字程度(JIS第一水準)をアセット生成しても、作業中便利ではあっても困ることはあまりないので、とりあえず今回はまとめてアセット化します。


そして文字コードの一覧はこちらのものをダウンロードして使わせて頂きました(感謝!。

https://gist.github.com/kgsi/ed2f1c5696a2211c1fd1e1e198c96ee4

画像8

「Donwload ZIP」をクリックしてダウンロードします。
展開するとファイル japanese_full.txt があります。これを TextMesh Pro 用アセット作成の際に使います。


TextMesh Pro 用アセット作成

上部メニューから、
Window>TextMeshPro>Font Asset Creator
Font Asset Creator が別ウィンドウで起動します。

今回はフォントの中から、mplus-1m-medium をアセット化します。

1)Source Font File 右のアイコンをクリック。
Select Font ウィンドウが開きます。mplus-1m-medium をダブルクリックして選択。

画像7

2)メモ帳をなどのエディタで先程展開済の japanese_full.txt を開きます。
CTRL-A でテキスト内容を全選択、CTRL-C でコピーします。

3)Font Asset Creator ウィンドウに戻り、Custom Character List の欄内をマウス左クリックしてから CTRL-V で貼り付けます。

4)その他のパラメータ欄は上図のよう設定。
Custom Size、Padding、Atlas Resolution 等々とりあえずここでは全て同じように設定して下さい。

5)Generate Font Atlas をクリック。
しばらく時間がかかるので待ちます。

6)Save as をクリック。

画像7

Assets/TextMesh Pro/Resources/Fonts & Materials のフォルダを指定して保存します。

他のフォントをアセット生成する際の注意点:
上図内の Excluded characters: 0 (黄色文字の0)に注目して下さい。0なら問題ないです。この数値はアセットに収まらなかった=アセット化できなかった文字数を示しています(その文字は表示できず□になります)。
この辺の調整は色々あるのですが、この値が0以外の場合、とりあえずは Sampling Point Size の値 45 を1つ減らして44 に変更して再度 Generate Font Atlas をクリックして下さい。Excluded characters: 0 になったら Save as で保存して下さい(逆に46以上に増やしても Excluded characters: 0 なら増やした方が良いです)。
Atlus Resolution を増やしても改善できますが、PCスペックによっては動作しない場合があるようです。
Missing Characters は Custom Character List 欄で指定した文字コードのうち、TTFフォントに存在しなかった文字数です。そもそもTTFに無いフォントの数なのでこれは気にしなくて良いです。

7)Font Asset Creator ウィンドウ右上の X をクリックして閉じます。


以下のようにできあがります。

画像6

実際エクスプローラでこのファイルのサイズを見ると約35MBです。
余程ストレージが少ない、CPU性能が低いなどでもなければ、たいしたサイズではないので試したいフォントは上記の手順でいくつかアセット化しておいても良いです。

このようにアセット化したフォントだけが、実際にシーン上で TextMesh Pro で使用可能になります。

この手順で最低限 TextMesh Pro で使いたい文字フォントが利用できるようになりました。

TextMesh Pro の文字作成&設定 」に続きます。








よもやま話

コンピュータにおける日本語(漢字)については魑魅魍魎な歴史があります。これだけで本1冊になってるくらいです。
深追いはやめましょう(ろくなことがない。

作るアプリケーションによっては(昔は)そこに片足つっこまなければならない場合もありました(どころか両足)。
Unityは基本的に .net を使用できる=UTF-8 だと思うのでとりあえずは気にすることは無いと思います。

漢字のJIS第一水準、JIS第二水準の文字セットが変更されることがあると、また面倒なことになりそうですが(たまにある。

ちなみに近年ではWindowsでメイリオフォントが採用されたあたりで色々ありました。
また、なんらかのDBデータとか文字データを扱う場合に、そこにSJISとかJISとかEUCとかなんかが混じってるとちょっと(とんでもなく)面倒なことになります(地獄。

つまりUnityでゲームを作成する際の漢字データは UTF-8 で作成しておくと楽かもしれません。


ちなみに昔はVisual C++/C#でごにょごにょしてましたが、昨今はコマンドラインツールで良いようなものも、Unity(C#)で書くことがあります。
なんやかんやでゲーム系の素材が扱いやすいのですよUnity。

さすがにアプリ実行中のTGAとかWAVの動的な直接読込はデータフォーマットに異常があるとUnityが落ちてしまうのでインポーターは自前で書いてますが(UnityはEditor上のインポート時に正当性を保証しているので、ランタイムは高速性重視でノーチェックなんだと思います)。

C#だと各種よくある実装コードはGit-Hubから入手もしやすいのと(ライセンスには注意).net の Nuget も使えたりするので色々便利なんですよね。







以下の書籍にて執筆参加しています。興味ある方は是非どうぞ。
https://amzn.to/2YxO0dw


この記事が気に入ったらサポートをしてみませんか?