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

2024年9月19日


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

サンプルシーン

ここでは、UI画面に表示する場合と3Dオブジェクトとして表示する場合の例を挙げています。それぞれ使用するクラスが異なるので注意しましょう。

uGUIへ表示する

次のコードでは、アタッチされたスクリプトでのインスペクター上のtextMeshProUGUIに上記ゲームオブジェクトをアウトレット接続(ドラッグ&ドロップ)します

using UnityEngine;
using TMPro;

public class TextMeshProSample : MonoBehaviour
{
    public TextMeshProUGUI textMeshProUGUI;

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

方法1: GetComponentを使用する

まず、TextMeshProUGUIコンポーネントがアタッチされているゲームオブジェクトでスクリプトを実行する場合、GetComponent<TextMeshProUGUI>()を使用してコンポーネントを取得できます。

csharpコードをコピーするusing UnityEngine;
using TMPro;

public class TextMeshProSample : MonoBehaviour
{
    private TextMeshProUGUI textMeshProUGUI;

    void Start()
    {
        // 同じゲームオブジェクトからコンポーネントを取得
        textMeshProUGUI = GetComponent<TextMeshProUGUI>();
        textMeshProUGUI.text = "表示したいテキスト";
    }
}

方法2: 他のゲームオブジェクトから取得する

もしTextMeshProUGUIが他のゲームオブジェクトにアタッチされている場合、GameObject.Find()transform.Find()を使用してゲームオブジェクトを取得し、その後GetComponent<TextMeshProUGUI>()でコンポーネントを取得します。

csharpコードをコピーするusing UnityEngine;
using TMPro;

public class TextMeshProSample : MonoBehaviour
{
    private TextMeshProUGUI textMeshProUGUI;

    void Start()
    {
        // オブジェクト名でゲームオブジェクトを検索
        GameObject textObject = GameObject.Find("TextObjectName");
        if(textObject != null)
        {
            textMeshProUGUI = textObject.GetComponent<TextMeshProUGUI>();
            textMeshProUGUI.text = "表示したいテキスト";
        }
        else
        {
            Debug.LogError("指定したゲームオブジェクトが見つかりません");
        }
    }
}

注意点:

  • GameObject.Find()はシーン内のゲームオブジェクトを名前で検索しますが、パフォーマンスに影響を与える可能性があるため、頻繁な使用は避けてください。
  • 確実にオブジェクトを取得するためには、インスペクターから参照をアサインするか、[SerializeField]を使用する方法も検討してください。

以上の方法で、ゲームオブジェクトを取得してTextMeshProにテキストを代入し、表示することができます。

3D空間へ表示する

using UnityEngine;
using TMPro;

public class TextMeshProSample : MonoBehaviour
{
    public TextMeshPro textMeshPro3D;

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

TMP_TextとTextMeshProUGUIとTextMeshProの違い

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

TMP_Text

  • TMP_Text は TextMeshPro および TextMeshProUGUI の基本クラスです。
  • これは抽象クラスであり、直接使用されることはありませんが、TextMeshPro と TextMeshProUGUI の共通機能を提供します。
  • フォントアセット、テキストの表示、レイアウト、スタイリングなど、テキストに関連する基本的なプロパティとメソッドが含まれています。

TextMeshPro

  • TextMeshPro は3D環境で使用されるテキストコンポーネントです。
  • 主に3Dオブジェクトとしてシーン内に配置され、ビルボードや3Dテキスト効果に利用されます。
  • 3D環境でのテキスト表示に特化しており、視覚的な品質が高く、3Dオブジェクトとして扱われます。

TextMeshProUGUI

  • TextMeshProUGUI はUIキャンバスで使用されるテキストコンポーネントです。
  • 主に2D UI要素として使用され、HUD、メニュー、その他のインターフェース要素に利用されます。
  • UnityのUGUIシステムと連携しており、2Dの画面空間でのテキスト表示に最適化されています。

簡単に言うと、TMP_Text は共通の機能を提供する基本クラスであり、TextMeshPro は3Dテキスト、TextMeshProUGUI は2D UIテキストに特化したクラスです。開発者は、シーンの要件に応じて適切なコンポーネントを選択することが重要です。クラスであり、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)の両方が示されています。コードの各部分を詳細に説明します。

クラスと変数の宣言

  • using UnityEngine; using TMPro; は、UnityエンジンとTextMeshPro名前空間を使用するための宣言です。
  • TextMeshProSample は、このスクリプトのクラス名です。

公開された変数

  • public TMP_Text tMPro; は、TMP_Text型の変数で、インスペクターからアクセス可能です。これはTextMeshProの基本クラスです。
  • public TextMeshPro textMeshPro3D; は、3Dオブジェクトとして使用されるTextMeshProのインスタンスです。
  • public TextMeshProUGUI textMeshProUGUI; は、UI要素として使用されるTextMeshProUGUIのインスタンスです。

プライベート変数

  • TMP_Text baseTMPro; はプライベート変数で、ポリモーフィズムをテストするために使われます。

Updateメソッド

  • Update() は毎フレーム呼ばれるメソッドです。
  • キーボードの '3' キーが押された場合(Input.GetKeyDown(KeyCode.Alpha3))、baseTMPro は textMeshPro3D のインスタンスを指します。
  • キーボードの 'U' キーが押された場合(Input.GetKeyDown(KeyCode.U))、baseTMPro は textMeshProUGUIのインスタンスを指します。
  • 次に ShowTextMeshPro(baseTMPro) メソッドが呼ばれ、選択されたTextMeshProインスタンスにランダムな数字が表示されます。

ShowTextMeshProメソッド

  • ShowTextMeshPro(TMP_Text baseTmpPro) は、引数として TMP_Text オブジェクトを受け取ります。
  • このメソッドは、与えられたTextMeshProオブジェクトのテキストをランダムな数字(0から99の間)に設定します。

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