テキストをゲーム画面に入れてみたいけど、TextとTextMeshProの2種類があるみたい。一体、何が違うの?
本記事の内容
・TextとTextMeshProの違い
・TextMeshProを使う時の注意点
Unityでテキストを入れるにはテキストとTextMeshProの2種類ある
TextよりもTextMeshProを使おう!
Unityでテキストをゲーム内に表示するには、Text(古い機能)とTextMeshPro(新しい機能)の二種類あります。
元々はTextしかなく、有料アセットでTextMeshProが売られていたのですが、Unity社がTextMeshProを買収し、Unity標準で使えるようになったという経緯があります。
TextとTextMeshProでは、スクリプトの内容も変わってしまうので、Textが進化してTextMeshProになったというより、別機能くらいに捉えた方がいいかもしれません。
テキストはこちらの「古い機能」から追加可能です。
TextMeshProは、UI > テキスト-TextMeshProから追加可能です。
困ったことにインターネット上でUnityの解説ブログなどを見ると、古い記事の場合は、TextMeshProではなく、Textを使用することを前提としているものが多く、初心者はとても混乱しやすいです。
このブログでは、基本的にTextMeshProを使う前提で解説します。
テキストとTextMeshProの違いについて、以下の通りまとめました。
特徴 | テキスト | TextMeshPro |
---|---|---|
文字のキレイさ | 拡大すると滲んでしまう | 拡大しても滲まない |
文字の加工のしやすさ | 標準で加工出来る内容が少ない | 標準でいろんな加工が可能 |
お手軽さ | ダウンロードしたフォントをドラッグ アンドドロップするだけで使用出来る | 独自フォントを使用するには一手間必要になる |
TextMeshProを使うデメリットはほぼないので、基本的にはTextMeshProを使うことをおすすめします。
ただ、厄介なのが、デフォルトのTextMeshProは英数字しか対応していないため、日本語を使うためにはひと手間必要です。こちらの関連記事で詳しく解説しています。
スクリプト上でのTextとTextMeshProの違い
テキストを使うか、TextMeshProを使うかで、スクリプトも変わります。
画面上に入力したキーを表示するスクリプトをテキストで表示する場合と、TextMeshProで表示する場合でそれぞれ作ってみました。
まずは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のオブジェクトにアタッチします。
そして実行すると以下の通りです。
スクリプトの中で、注目したい旧式の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を使えるようにして欲しいんですけどね。。。
それでは、素敵なゲーム制作ライフを!
コメント
コメント一覧 (4件)
[…] UnityのText(レガシー)とTextMeshProの違い【初心者向け解説】 […]
[…] UnityのText(レガシー)とTextMeshProの違い【初心者向け解説】 […]
[…] UnityのText(レガシー)とTextMeshProの違い【初心者向け解説】 […]
[…] UnityのText(レガシー)とTextMeshProの違い【初心者向け解説】 […]