UnityのText(レガシー)とTextMeshProの違い【初心者向け解説】

ころもちゃん

テキストをゲーム画面に入れてみたいけど、TextとTextMeshProの2種類があるみたい。一体、何が違うの?

本記事の内容

・TextとTextMeshProの違い
・TextMeshProを使う時の注意点

目次

Unityでテキストを入れるにはテキストとTextMeshProの2種類ある

TextよりもTextMeshProを使おう!

Unityでテキストをゲーム内に表示するには、Text(古い機能)とTextMeshPro(新しい機能)の二種類あります。
元々はTextしかなく、有料アセットでTextMeshProが売られていたのですが、Unity社がTextMeshProを買収し、Unity標準で使えるようになったという経緯があります。

TextとTextMeshProでは、スクリプトの内容も変わってしまうので、Textが進化してTextMeshProになったというより、別機能くらいに捉えた方がいいかもしれません。

テキストはこちらの「古い機能」から追加可能です。

Textの場合

TextMeshProは、UI > テキスト-TextMeshProから追加可能です。

困ったことにインターネット上でUnityの解説ブログなどを見ると、古い記事の場合は、TextMeshProではなく、Textを使用することを前提としているものが多く、初心者はとても混乱しやすいです。
このブログでは、基本的にTextMeshProを使う前提で解説します。

テキストとTextMeshProの違いについて、以下の通りまとめました。

特徴テキストTextMeshPro
文字のキレイさ拡大すると滲んでしまう拡大しても滲まない
文字の加工のしやすさ標準で加工出来る内容が少ない標準でいろんな加工が可能
お手軽さダウンロードしたフォントをドラッグ
アンドドロップするだけで使用出来る
独自フォントを使用するには一手間必要になる
テキストとTextMeshProの違い

TextMeshProを使うデメリットはほぼないので、基本的にはTextMeshProを使うことをおすすめします。
ただ、厄介なのが、デフォルトのTextMeshProは英数字しか対応していないため、日本語を使うためにはひと手間必要です。こちらの関連記事で詳しく解説しています。

上がTextMeshProで下がテキスト。Textは拡大すると滲む

スクリプト上でのTextとTextMeshProの違い

テキストを使うか、TextMeshProを使うかで、スクリプトも変わります。
画面上に入力したキーを表示するスクリプトをテキストで表示する場合と、TextMeshProで表示する場合でそれぞれ作ってみました。

まずはTextMeshProの場合。

ChatGPTへのプロンプト
TextMeshProで、ユーザーが入力したキーを画面に出力するスクリプトを作成して

using UnityEngine;
using TMPro; // TextMeshProの名前空間をインポート

public class DisplayKeyInput : MonoBehaviour
{
    public TextMeshProUGUI textDisplay; // TextMeshProUGUIのテキストコンポーネントへの参照

    void Update()
    {
        foreach (KeyCode key in System.Enum.GetValues(typeof(KeyCode)))
        {
            if (Input.GetKeyDown(key))
            {
                textDisplay.text = "Key Pressed: " + key.ToString(); // キーの名前を表示
                break; // 複数のキーが同時に押された場合、最初のキーのみを表示
            }
        }
    }
}

こちらのスクリプトをTextMeshProのオブジェクトにアタッチします。

そして実行すると以下の通りです。

TextMeshProをスクリプトから動かす

スクリプトの中で、注目したい旧式のTextと違う点は2つです。

  • 名前空間に、using TMProを入れる必要がある
  • 変数の型は、TextMeshProUGUIという型にする必要がある


旧式のTextを使う場合で同じ事を行うスクリプトも作ってみます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DisplayKeyInputText : MonoBehaviour
{
    public Text textDisplay; // UnityEngine.UI.Text コンポーネントへの参照

    void Update()
    {
        foreach (KeyCode key in System.Enum.GetValues(typeof(KeyCode)))
        {
            if (Input.GetKeyDown(key))
            {
                textDisplay.text = "Key Pressed: " + key.ToString(); // キーの名前を表示
                break; // 複数のキーが同時に押された場合、最初のキーのみを表示
            }
        }
    }
}

こちらは、以下の特徴があります。

  • 名前空間に、using UnityEngine.UIを入れる必要がある
  • 変数の型は、Textという型にする必要がある

このように、TextMeshProを使うか、Textを使うかで、スクリプトの実装方法が異なるので注意が必要です。プロジェクトごとにどちらを使うかを統一するのがよいですね。

追記:
ドロップダウンリストでTextMeshProを使用し、スクリプトから参照する場合、DropDownというクラスではなく、TMP_Dropdownというクラスを参照するので注意。

おわりに

TextとTextMeshProの違いについての解説でした。TextMeshProが標準になったのは2019年頃ですので、もうUnityもデフォルトで日本語のTextMeshProを使えるようにして欲しいんですけどね。。。
それでは、素敵なゲーム制作ライフを!


この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ゲーム制作の敷居を下げ、もっと多くの人にゲーム作りを楽しんでもらうために、ゲームをカンタンに作る方法を”網羅的に”解説しています。
よかったらブックマークお願いします。

コメント

コメント一覧 (2件)

コメントする

目次