Unity入門

【Unity】TextMeshProの使い方 | スクリプト、フォントの追加、日本語化対応、表示の切り替え

Unityでテキストを扱うならTextMeshPro(TMP)は必須です。標準のUI Text比べて、高品質なフォント描画・リッチテキスト対応・メモリ効率の向上など多くのメリットがあります。

この記事では、TextMeshProの導入方法から基本設定、スクリプトを使ったテキスト変更、よくあるエラーの対処法まで、初心者でもわかりやすい形でまとめました。これを読めば、TextMeshProを気軽に扱えるようになります!

この記事でわかること

  • TextMeshProの導入方法と基本的な使い方
  • 標準のテキストとの違いとメリット
  • スクリプトからテキストを動的に変更する方法
  • よくあるエラーとその解決策

入力を行いたい方、ボタンと一緒に使いたい方はこちらも参考にしてください。

それでは、本題に入っていきましょう。

UnityのTextMeshPro(TMP)とは?

TextMeshPro(TMP)とは

TextMeshPro(TMP)は、Unity公式が提供する高品質なテキストフリースシステムです。標準のUI TextものTextMeshに比べて、以下の点で優れています。

  • 解像度に依存しないシャープなテキスト
  • リッチテキスト対応(色・太字・斜体・映像・シナリオなど)
  • メモリ効率の改善(標準テキストに比べて処理が軽い)
  • 3Dオブジェクト内でも使える

特に、テキストを美しく表示したい場合や、リッチテキストを活用したい場合は必須です。

TextMeshProの導入方法

TextMeshProはUnityの標準であるため、インストールは不要です。

※ ①は行わなくても初めて②を実行するときに「TMP Importer」が表示されます。

①「Window」タブからインポート

  1. Unityの[Window]→[TextMeshPro]→[Import TMP Essential Resouces]
  2. Import Unity Packageが開かれるので「Import」を選択
Unity TextMeshProのImportの画像

② ゲームオブジェクトの追加

  • UIとして追加する場合
    1. [GameObject] → [UI] → [Text – TextMeshPro]を選択
    2. 画面上にTMPテキストが表示される
  • 3Dオブジェクトとして追加する場合
    1. [GameObject] → [3D] → [text – TextMeshPro]を選択
    2. シーン内に3Dテキストが配置される
Unity TextMeshProのImportの画像

※ 追加後に「Canvas」というオブジェクトが作成されるので気になる方はこちらを参考にしてください。

TextMeshProの基本的な使い方

TextMeshProの基本的なプロパティはInspectorで設定できます。特によく使用するところだけを説明します。
※ ①、②、⑥は後述します。

Unity TextMeshProのプロパティの画像

①表示するテキスト
②使用するフォント
③太字、斜体等、フォントサイズ④Vector Color:文字の色
 Color Gradient:グラデーション
⑤テキストの余白、位置揃え
⑥TextMeshProの表示、非表示

TextMeshProテキストを変更する

InspectorでTextMeshProのテキストを静的に変更

Inspectorでテキストを動的に変更できます。

Unity TextMeshProのテキストの画像

スクリプトでTextMeshProのテキストを動的に変更

スクリプトからテキストを動的に変更できます。以下のコードはサンプルとして記載しております。

using TMPro; //TextMeshProを使用するときに必用
using UnityEngine;

public class TextController : MonoBehaviour {
    public TextMeshProUGUI textMeshPro;

    void Start() 
 {
        textMeshPro.text = "Hello"; //テキストの変更
    }
}

②Font(フォント)の追加

カスタムフォントを使うには、Font Assetの作成が必要です。

Font(フォント)のダウンロード

商用利用かつ無料でも良い方はGoogle Fontを以下のサイトからダウンロードしましょう。

Google Fonts:https://fonts.google.com

Font Assetの作成方法

以下のサイトを参考にしてください。

※ フォントによって表示できない文字もあるので気を付けましょう。

TextMeshProの日本語化対応(多言語化…)

日本語を入力すると「□(豆腐)」になることがあります。これは、Unity標準のフォントに日本語が含まれていないからです。以下のサイトを参考して多言語化対応をしましょう!

※ Font Asset CreatorによりFontを作成し、言語毎に設定する必要があります。

TextMeshPro表示の切り替え

InspectorでTextMeshPro表示を静的に切り替え

InspectorからTextMeshProを動的に表示、非表示ができます。

Unity TextMeshProのテキストの表示切替の画像

スクリプトでTextMeshPro表示を動的に切り替え

スクリプトからTextMeshProを動的に表示、非表示ができます。以下のコードはサンプルとして記載しております。

using TMPro;
using UnityEngine;

public class TextController : MonoBehaviour {
    public TextMeshProUGUI textMeshPro;

    void Start() 
 {
        textMeshPro.enabled = true; //テキストコンポーネントを表示
        textMeshPro.enabled = false; //テキストコンポーネントを非表示

        textMeshPro.gameObject.SetActive(true); //テキストコンポーネントを含むゲームオブジェクトを表示
        textMeshPro.gameObject.SetActive(false); //テキストコンポーネントを含むゲームオブジェクトを非表示
    }
}

よくあるエラーと解決策

フォントが表示されない

原因:フォントアセットが設定されていない
解決策:フォントアセットに正しいフォントを適用する。また、「□」のように表示される場合はフォントに文字登録がされていないのでフォントを変更する必要があります。

NullReferenceException : Object reference not set to an instance of an object

原因: TextMeshProコンポーネントが紐づいていない
解決策: InspectorでTextMeshProをアタッチする

まとめ

この記事では、TextMeshProの基本から応用まで解説しました。
TextMeshProは美しいテキスト表示・リッチテキスト対応・スクリプトからの動的変更ができるため、UnityのUIでのテキスト管理に最適です。

方法導入 → インストールは不要だが、インポートが必要
基本設定 → フォント・サイズ・リッチテキスト活用
スクリプト制御 → 動的なテキスト変更と表示、必表示の切り替え