0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】TextMeshProで文字を表示できるようになろう

0
Last updated at Posted at 2026-03-26

はじめに

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 テキストと古いテキストメッシュの代わりに使用するのに最適です。

やはりLegacyよりも今始めるならTextMeshProな気がしますね。

環境

  • Unity6.3(6000.3.11f1)
  • Windows

計測タイムを画面右上に表示してみよう

実際の使用例とともにどのようにTextMeshProを使用していくか説明していきます。

TextMeshProの準備

  1. GameObject > UI(Canvas) > Text - TextMeshProを追加
  2. 現在のProjectで初めてTextMeshProを使用する際には上記のようなポップが出ると思います。その際にはImport TMP Essentialsだけはインポートしてください
    TMPImporter
    HierarchyCanvasとその子供にText(TMP)が生成されます
  3. 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を変更

example

基本的にはScaleは1のままでuGUIは編集すべきです。コンポーネントを使用する際などにはScaleが1前提で作られているものが多いため思った動作にならないことがあります。私は何度か痛い目にあってきました。

C#スクリプトの書き方

今回は後からコードで変更しますが、試しにTime12min34.56secと入力してみました。
スクリーンショット 2026-03-24 183655.png

Tips:リッチテキストタグを使用してみる
Time:12<size=50%>min</size>34.56<size=50%>sec</size>
スクリーンショット 2026-03-24 183800.png
minsecの文字を他の文字と比較して50%の大きさにすることによって数字部分を目立たせてみました。リッチテキストタグの一部はlegacyの方でも使えますが、TextMeshProの方が使用できる種類が多いです。

以下に時間を計測してTimeに表示できるスクリプトを用意しました。

Timer.cs
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
.cs
TMP_Text textBox;

今回、TextMeshPro - Text(UI)コンポーネントを参照するために使用したクラス。他の記事ではTextMeshProUGUIで使用されているものもあり、今回の場合ではどちらでも構いません。TMP_TextTextMeshProUGUI(UI)とTextMeshPro(3D)の機能を併せ持つクラスです。

.cs
textBox = GetComponent<TMP_Text>();

(GameObject).GetComponent<(Component名)>()
指定したGameObjectについているコンポーネントを取得するために使用します。今回はこのスクリプトを保有しているGameObjectの別のコンポーネントを取得するためGameObjectの指定は必要ありません。GetComponentはInspectorの上から順番に参照して一致した段階で取得する動きをするためStartといった最小限の使用回数になるように心がけましょう。

  • キャスト
.cs
int minute = (int)timer / 60;

(変更後の型)
timerはfloat型です。float型をint型に直したいときはキャストという型変換を明示的に行う必要があります。

TextMeshProを使用する際の注意

  • 最初から使用されているフォントは日本語に対応していないため、自分でフォントを導入する必要があります。

最後に

  • 「はじめに」で紹介したUIToolkitですが、参考資料不足が目立つため記事を書きたいと思っています。完成しましたらこちらにリンクを追加したいと思います
  • これが私にとっての初めての記事となるため分かりづらい箇所があると思います。不足内容等ありましたらコメントいただけますと幸いです
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?