【Unity】TextMeshProにテキストを代入して表示する方法


TextMeshProにテキストを表示するには、textMeshProInstance.text = "表示したいテキスト"; を使用し、スクリプト内でテキストを指定します

サンプルシーン

ここでは、UI画面へ表示の時と3Dオブジェクトとして表示するときの例を挙げています
それぞれクラスが違いますので注意しましょう

uGUIへ表示する

using UnityEngine;
using TMPro;

public class TextMeshProSample : MonoBehaviour
{
    public TextMeshProUGUI textMeshProUGUI;

    void Start()
    {
        textMeshProUGUI.text = "aaa";
    }
}

3D空間へ表示する

using UnityEngine;
using TMPro;

public class TextMeshProSample : MonoBehaviour
{
    public TextMeshPro textMeshPro3D;

    void Start()
    {
        textMeshPro3D.text = "aaa";
    }
}

TMP_TextとTextMeshProUGUIとTextMeshProの違い

TMP_Text, TextMeshProUGUI, と TextMeshPro は、Unityで高品質なテキストを表示するために使用されるクラスです。それぞれの違いを説明します。

  1. TMP_Text:
    • TMP_TextTextMeshPro および TextMeshProUGUI の基本クラスです。
    • これは抽象クラスであり、直接使用されることはありませんが、TextMeshProとTextMeshProUGUIの共通機能を提供します。
    • フォントアセット、テキストの表示、レイアウト、スタイリングなど、テキストに関連する基本的なプロパティとメソッドが含まれています。
  2. TextMeshPro:
    • TextMeshPro は3D環境で使用されるテキストコンポーネントです。
    • これは主に3Dオブジェクトとしてシーン内に配置され、ビルボードや3Dテキスト効果に利用されます。
    • 3D環境でのテキスト表示に特化しており、視覚的な品質が高く、3Dオブジェクトとして扱われます。
  3. TextMeshProUGUI:
    • TextMeshProUGUI はUIキャンバスで使用されるテキストコンポーネントです。
    • これは主に2D UI要素として使用され、HUD、メニュー、その他のインターフェース要素に利用されます。
    • UnityのUGUIシステムと連携しており、2Dの画面空間でのテキスト表示に最適化されています。

簡単に言うと、TMP_Text は共通の機能を提供する基本クラスであり、TextMeshPro は3Dテキスト、TextMeshProUGUI は2D UIテキストに特化したクラスです。開発者は、シーンの要件に応じて適切なコンポーネントを選択することが重要です。

ポリモーフィズムテスト用サンプル

using UnityEngine;
using TMPro;

public class TextMeshProSample : MonoBehaviour
{
    // 基本クラス
    public TMP_Text tMPro;

    // 派生クラス(3D空間表示用)
    public TextMeshPro textMeshPro3D;

    // 派生クラス(uGUI表示用)
    public TextMeshProUGUI textMeshProUGUI;

    // ポリモーフィズムテスト用の基本クラス
    TMP_Text baseTMPro;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            baseTMPro = textMeshPro3D;
            ShowTextMeshPro(baseTMPro);
        }
        else if (Input.GetKeyDown(KeyCode.U))
        {
            baseTMPro = textMeshProUGUI;
            ShowTextMeshPro(baseTMPro);
        }
    }

    void ShowTextMeshPro(TMP_Text baseTmpPro)
    {
        baseTmpPro.text = Random.Range(0, 100).ToString();
    }
}

このコードは、Unityで TextMeshPro を使ったテキストの表示を制御するためのサンプルです。TextMeshPro は、高品質なテキストレンダリングを可能にするUnityのアセットです。ここでは、3D空間での表示 (TextMeshPro) とUIでの表示 (TextMeshProUGUI) の両方が示されています。コードの各部分を詳細に説明します。

  1. クラスと変数の宣言:
    • using UnityEngine; using TMPro; は、UnityエンジンとTextMeshPro名前空間を使うための宣言です。
    • TextMeshProSample は、このスクリプトのクラス名です。
  2. 公開された変数:
    • public TMP_Text tMPro; は、TMP_Text型の変数で、インスペクターからアクセス可能です。これはTextMeshProの基本クラスです。
    • public TextMeshPro textMeshPro3D; は、3Dオブジェクトとして使用される TextMeshPro のインスタンスです。
    • public TextMeshProUGUI textMeshProUGUI; は、UI要素として使用される TextMeshProUGUI のインスタンスです。
  3. プライベート変数:
    • TMP_Text baseTMPro; はプライベート変数で、ポリモーフィズムをテストするために使われます。
  4. Update メソッド:
    • Update() は毎フレーム呼ばれるメソッドです。
    • キーボードの '3’ キーが押された場合 (Input.GetKeyDown(KeyCode.Alpha3)), baseTMProtextMeshPro3D のインスタンスを指します。
    • キーボードの 'U’ キーが押された場合 (Input.GetKeyDown(KeyCode.U)), baseTMProtextMeshProUGUI のインスタンスを指します。
    • 次に ShowTextMeshPro(baseTMPro) メソッドが呼ばれ、選択されたTextMeshProインスタンスにランダムな数字が表示されます。
  5. ShowTextMeshPro メソッド:
    • ShowTextMeshPro(TMP_Text baseTmpPro) は、引数として TMP_Text オブジェクトを受け取ります。
    • このメソッドは、与えられたTextMeshProオブジェクトのテキストをランダムな数字(0から99の間)に設定します。

このコードは、キーボード入力に応じて、3DテキストとUIテキストのどちらかをランダムな数字で更新する方法を示しています。ポリモーフィズムの概念を利用してTMP_Text 型の変数を使用して異なるTextMeshProタイプのインスタンスを操作しています。