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フォルダに保存します。詳細は以下のページを参照してください。
これで日本語が表示されるはずですが、■が表示される場合は、サンプリングサイズに問題がある可能性があります。私はサイズを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の接続を切るか、少し待ってから関数を呼び出すなどの処置が必要かもしれません。