Memo plus Alpha

メモにプラスアルファを加えて価値ある情報に。

Modern UI PackのModal Windowで日本語を表示する

はじめに

UnityのUIはデフォルトではあまり洗練されていませんが、アセットストアからUIを導入すればだいぶ見た目がよくなります。今回は、Modern UI Pack($20)というものを導入してみましたが、日本語が表示されないという問題がありました。

準備

Modern UI PackはText Mesh Proに依存しているため、これをインストールする必要があります。これはUnityにデフォルトで入っていますが、次の操作で有効にする必要があります。

 

Window->Package Manger->Text Mesh Pro

 

また、日本語のフォントを準備する必要があります。「日本語 フリーフォント」などで検索し、TTF形式のファイルを入手します。

UnityはTTF形式のファイルをそのまま使うことができるのですが、Text Mesh Proでは形式を変換する必要があります。

Window->TextMeshPro - Font Asset Creatorから、サンプリングサイズや使う文字など(例えばhttps://gist.github.com/kgsi/ed2f1c5696a2211c1fd1e1e198c96ee4からコピペします)を指定してgenerateします。そのファイルを、Modern UI PackのFontsフォルダに保存します。詳細は以下のページを参照してください。

 

qiita.com

 

これで日本語が表示されるはずですが、■が表示される場合は、サンプリングサイズに問題がある可能性があります。私はサイズを40、Resolutionを4096*4096にすれば解決しました。

Modern UI Packの設定

ここまできたら、あとはModern UI Packの設定をすればOKです。ただし、Game ObjectからボタンなどのTextまで辿って直接編集する方法だと、設定が反映されません。

Projectsの中のModern UI Pack->Resources->Modern UI Manager

でUI Managerを起動し、その中にあるModal Windowのところでフォントを指定すればOKです(あるいはUIの部品からこのコンポーネントをオフにすればTextを直接編集できます)。

なお、プロジェクトを起動した後にModern UI Pack Managerが読み込まれるようですが、立ち上がるタイミングがどうもStart関数よりも後になることがあるようです。Start関数の中でボタン等のテキストを変更する場合、一瞬写った後にUI Managerで設定した値に上書きされることがあります。

これを防ぐにはComponentの接続を切るか、少し待ってから関数を呼び出すなどの処置が必要かもしれません。