どうも蒼水です。
今回はテキストを表示するUIをTextMeshProを使用して作成していきます。
前回の記事はこちらからどうぞ。
atelier-aomi.hatenablog.com
実行環境:Unity6(6000.1.17f1)
今回の目的

今回はUnity標準で用意されているTextMeshProというものを使ってテキストUIを作成することを目的とします。
また、標準フォントでは日本語がサポートされていませんので日本語の扱い方も含め解説していきます。
Text Mesh Proの使い方


hierarchyで右クリック -> UI -> Text - TextMeshProがあるのでそこから作成できます。
作成するとText Mesh Proというコンポーネントがついているのでそこにテキストを入力することでUIとしてテキストを表示することができます。色やフォントサイズなどフォトショとかでできるような操作は概ねできるのとそんなに難しいものでもないのでここは割愛します。
Color Grading等色設定に関しては触れておきたいのでそれは次回記事で触れます。
使い方自体はとても簡単ですが、ちょーっとデフォルトだとダサさがやばいですね!というわけで次項以降でフォントの変更方法などにも触れていってみようと思います。
前提:使用するフォントについて
フォントはデフォルトではLiberationSansが使用できるようになっていますが、これを別のフォントにすることができます。
基本的に契約して使用するタイプのフォント類は結構いろいろめんどくさいので自分はよくGoogle FontsというGoogleが無料で提供してくれているフォントを使用しています。
もちろんゲームに使用することも可能になっているので非常に重宝しますので今回はこちらを使って解説していきます。
実際自分のプロジェクトで使えそうなフォントがあるならこちらからの取得をおすすめします。神です。
なお、ほとんどのGoogle FontsはSIL Open Font License (OFL)というライセンスが適用されています。商用利用やソフトウェアへの組み込みもOKです。
fonts.google.com
前提:日本語文字サポートについて
UnityのText Mesh Proは標準では日本がサポートされていません。
後述しますが、Font Assetを作成する際に必要な文字を羅列する必要があります。
ASCIIやJIS規格などいろいろありますがググると色々出てきますが、大体の日本語をサポートできる一覧をGithubにまとめてくださっている方がいらっしゃったのでこちらをいつも利用させていただいております(いつもありがとうございます)
gist.github.com
フォントを用意する

フォントの用意については前述したGoogleFontsに行き使用したいフォントをダウンロードして使用します。
今回はわかりやすくドット感のあるフォント(Dot Gothic16)を使ってみることにします。
右上のGet Fontをクリックして次に進みます。
fonts.google.com


すると遷移先のページからダウンロードができるので必要なフォントをダウンロードします。

zipファイルがダウンロードされるのでその中にある.ttfというものがフォント本体であり、これをUnityにインポートして使用します。
これでUnityに持ち込むところまでは完了です。OFLというファイルは入れなくても動作的には問題ないです(ライセンスが書かれたテキストファイルです)
次項で実際にUnityで使用するためのFont Assetというデータを作成していきます。
フォントを変更する

Font Assetの用意はできているのであとはText Mesh Proコンポーネントにあるフォントの参照をLibarationSansから今回用意したDot Gothic16に変更します。
これにより日本語もサポートされたFont Assetですので漢字である「蒼水家技術録」というテキストも正常に描画されてることが確認できます。
サポートされない文字は□□□□□のような描画になってしまうのでそれが解消されていますね。
なお、先ほどの日本語サポート文字一覧でも漏れている文字や記号があったりするのでそういった場合は先ほどの一覧に自分で必要な文字を追加することで対処可能です。
もし新しくフォントを今回の流れで導入した後でも□□□□□が現れた場合はサポートされていない文字が使用されている、ということなのでそこは適宜追加しましょう。
余談:Font Assetの最適化について

Font Assetの中身についてのお話になりますが、Font Assetにはサポートする全ての文字を含めたテクスチャとマテリアルが含まれます。
これは先ほどのFont Asset Creatorで設定できる解像度と関係があり、当然解像度が大きければ綺麗に文字を出せます。
一方で、あまりにも大きいとテクスチャサイズが大きくなりすぎてメモリを圧迫することがあります。フォントだけで数十MB持ってかれる場合もありアプリケーションを軽量にする意味でも解像度は適切に設定する必要があります。
また、文字数が多ければ多いほどきれいに出すための必要テクスチャサイズは大きくならざるを得ないのでアプリケーションで使用しない文字列は排除し、必要最低限の文字だけで構成することが望ましいです。
試作段階であったりする場合は気にしなくてよいと思いますがビルドして実機動作させる場合はこの辺りは最適化しておくと良いでしょう。

上画像は2048pix と1024pixの解像度でのFont Assetのルックの差になります。
あまりに小さくなりすぎると文字がボケボケになり、UXに支障をきたしますのであくまでも適切なサイズ感にとどめUXは保てる最低ラインを確保しましょう。
おわりに

最後にそれっぽい感じの会話テキスト表示を作ってみました。これでテキストUIの基本は理解できました。
また日本語のサポートもできたので概ねテキスト周りで困ることはなく開発が来出ると思います。
次回はテキストのマテリアル周りについて深堀していければと思います。
テキストにはアウトラインを付けたりドロップシャドウを付けたりすることができるようになっているのでそのあたり触れていければと思います。