はじめに
Unityで文字を表示する方法には複数方法がありますが、私が思いついたものとしては、
- uGUIのLegacyの
Text - uGUIの
TextMeshPro - UIToolkitの
Label
TextMeshProがUnityで使用できるようになってから時間は経ちましたが、未だにUnity 文字表示と検索すると上位にはLegacyの機能を使用した解説が多くみられます。私も2024年にUnityを始めましたが初めて触ったのはLagacyの方です。Legacyは初心者にとっては始めやすい面もありますが、TextMeshProで使用できる機能がLegacyの方では使用できなかったり、TextMeshProの方が文字をよりきれいに表示できるため初心者であってもお勧めしたいです。
この記事の主な対象者
- 今までLegacyを使用してきたが
TextMeshProに挑戦したい方 - Unityではじめて文字を表示してみようと思っている方
TextMeshProとは
TextMeshPro は、Unity のための究極のテキストソリューションです。Unity の UI テキストと古いテキストメッシュの代わりに使用するのに最適です。
- 引用:Unity公式TextMeshPro
やはりLegacyよりも今始めるならTextMeshProな気がしますね。
環境
- Unity6.3(6000.3.11f1)
- Windows
計測タイムを画面右上に表示してみよう
実際の使用例とともにどのようにTextMeshProを使用していくか説明していきます。
TextMeshProの準備
-
GameObject > UI(Canvas) > Text - TextMeshProを追加 - 現在のProjectで初めてTextMeshProを使用する際には上記のようなポップが出ると思います。その際には
Import TMP Essentialsだけはインポートしてください

HierarchyにCanvasとその子供にText(TMP)が生成されます -
Text(TMP)を選択後、Moov Tool(Wキー)で場所を調整させながらRect Tool(Tキー)でWidthとHeightを変更して、TextMeshPro - Text(UI) > FontSizeからフォントサイズを調整して、TextMeshPro - Text(UI) > TextInputで表示したい内容を入れる
補足ですが、uGUIの大きさを変えるときはScale Tool(Rキー)ではなくRect Toolがお勧めです。
| Tool名 | 仕様 |
|---|---|
| Scale Tool | Scaleを変更 |
| Rect Tool | Width,Heightを変更 |
基本的にはScaleは1のままでuGUIは編集すべきです。コンポーネントを使用する際などにはScaleが1前提で作られているものが多いため思った動作にならないことがあります。私は何度か痛い目にあってきました。
C#スクリプトの書き方
今回は後からコードで変更しますが、試しにTime12min34.56secと入力してみました。

Tips:リッチテキストタグを使用してみる
Time:12<size=50%>min</size>34.56<size=50%>sec</size>

minとsecの文字を他の文字と比較して50%の大きさにすることによって数字部分を目立たせてみました。リッチテキストタグの一部はlegacyの方でも使えますが、TextMeshProの方が使用できる種類が多いです。
以下に時間を計測してTimeに表示できるスクリプトを用意しました。
using UnityEngine;
using TMPro;
public class Timer : MonoBehaviour
{
float timer = 0f;
TMP_Text textBox;
void Start()
{
textBox = GetComponent<TMP_Text>();
}
// Update is called once per frame
void Update()
{
timer += Time.deltaTime;
int minute = (int)timer / 60;
float second = timer % 60;
textBox.text = $"Time:{minute}min{second:F2}sec";
}
}
このスクリプトはTextMeshProのGameObjectに対して追加してください。実行するとテキストが書き換わってタイマーのようになると思います。
0分であっても0minが表示されてしまうのでそこを改良してみてもよいかもしれません。
C#スクリプトの解説
TMP_Text
TMP_Text textBox;
今回、TextMeshPro - Text(UI)コンポーネントを参照するために使用したクラス。他の記事ではTextMeshProUGUIで使用されているものもあり、今回の場合ではどちらでも構いません。TMP_TextはTextMeshProUGUI(UI)とTextMeshPro(3D)の機能を併せ持つクラスです。
- 参考:Unity公式Class TMP_Text
GetComponent
textBox = GetComponent<TMP_Text>();
(GameObject).GetComponent<(Component名)>()
指定したGameObjectについているコンポーネントを取得するために使用します。今回はこのスクリプトを保有しているGameObjectの別のコンポーネントを取得するためGameObjectの指定は必要ありません。GetComponentはInspectorの上から順番に参照して一致した段階で取得する動きをするためStartといった最小限の使用回数になるように心がけましょう。
- キャスト
int minute = (int)timer / 60;
(変更後の型)
timerはfloat型です。float型をint型に直したいときはキャストという型変換を明示的に行う必要があります。
TextMeshProを使用する際の注意
- 最初から使用されているフォントは日本語に対応していないため、自分でフォントを導入する必要があります。
- 導入方法が分かりやすかった記事:TextMeshProの使い方
最後に
- 「はじめに」で紹介したUIToolkitですが、参考資料不足が目立つため記事を書きたいと思っています。完成しましたらこちらにリンクを追加したいと思います
- これが私にとっての初めての記事となるため分かりづらい箇所があると思います。不足内容等ありましたらコメントいただけますと幸いです
