UnityにおけるTextMeshProを使用したワールド座標でのテキスト表示方法

Unityでテキストを表示する際、TextMeshProは高品質なテキストレンダリングを提供します。本資料では、TextMeshProを使用してワールド座標およびCanvasを使用してテキストを表示する方法について説明します。

TextMeshProでの表示方法の違い

TextMeshProには主に2つの方法でテキストを表示することができます:

ワールド座標に表示(3Dオブジェクトとして)

  • GameObject > 3D Object > Text - TextMeshProを選択。
  • シーン内の任意のワールド座標に配置して、オブジェクトの一部として表示します。

Canvasに表示(UIとして)

  • GameObject > UI > Text - TextMeshProを選択。
  • UI要素としてCanvasに追加し、スクリーン座標やUI内での位置を調整できます。

次のセクションでは、それぞれの方法を詳しく解説します。


手順

1. 3D TextMeshProオブジェクトの作成

  1. メニューからオブジェクトを作成
    Unityエディタの上部メニューから以下を選択します。
   GameObject > 3D Object > Text - TextMeshPro
  1. TextMeshPro Essentialsのインポート(初回のみ)
    初めてTextMeshProを使用する場合、プロンプトが表示されますので、Import TMP Essentials をクリックして必要なリソースをインポートします。
  2. テキストの編集
    Inspectorウィンドウで表示テキスト、フォント、サイズ、色などの設定を行います。
  3. ワールド座標での配置
    TransformコンポーネントのPositionを調整し、シーン内の任意の場所に配置します。これにより、3Dオブジェクトとしてテキストが表示されます。

2. Canvasを使用したTextMeshProのUI表示

  1. メニューからUIオブジェクトを作成
    上部メニューから以下を選択します。
   GameObject > UI > Text - TextMeshPro

これにより、Canvas内にTextMeshProオブジェクトが作成されます。

  1. Canvasの設定
    TextMeshProオブジェクトはCanvasの子オブジェクトとして作成されます。Canvasの設定で表示モードを変更できます。
  • Render Mode: Screen Space - Overlay(デフォルト)またはWorld Spaceを選択します。Screen Space - Overlayでは、テキストはスクリーン座標上に表示され、常に画面に固定されます。World Spaceに設定すると、Canvas全体がワールド座標に配置されるようになります。
  1. テキストの編集
    Inspectorウィンドウで表示テキスト、フォント、サイズ、色などの設定を行います。
  2. UI上での配置
    TextMeshProオブジェクトはCanvas内に配置されるため、RectTransformを使ってスクリーン座標やCanvas内での位置を調整します。AnchorsPivotの設定を調整して、ウィンドウのサイズ変更に対する動作を制御することも可能です。

スクリプトを使用したテキストの生成(Canvasとワールド座標の両方)

動的にTextMeshProオブジェクトを生成する場合、Canvasの使用とワールド座標の使用で設定が異なります。以下の例は両方のケースでテキストを生成する方法です。

ワールド座標にTextMeshProを表示するスクリプト

using TMPro;
using UnityEngine;

public class CreateWorldText : MonoBehaviour
{
    void Start()
    {
        // 新しいGameObjectを作成
        GameObject textObj = new GameObject("WorldText");
        textObj.transform.position = new Vector3(0, 0, 0); // 表示位置を設定

        // TextMeshProコンポーネントを追加
        TextMeshPro textMeshPro = textObj.AddComponent<TextMeshPro>();
        textMeshPro.text = "こんにちは、世界!";
        textMeshPro.fontSize = 5;
        textMeshPro.color = Color.white;
    }
}

CanvasにTextMeshProを表示するスクリプト

using TMPro;
using UnityEngine;

public class CreateUIText : MonoBehaviour
{
    public Canvas canvas;

    void Start()
    {
        // Canvasの子オブジェクトとしてTextMeshProを追加
        GameObject textObj = new GameObject("UIText");
        textObj.transform.SetParent(canvas.transform);

        // RectTransformの設定
        RectTransform rectTransform = textObj.AddComponent<RectTransform>();
        rectTransform.sizeDelta = new Vector2(400, 200); // テキストのサイズ設定
        rectTransform.localPosition = new Vector3(0, 0, 0); // 位置を設定

        // TextMeshProUGUIコンポーネントを追加
        TextMeshProUGUI textMeshPro = textObj.AddComponent<TextMeshProUGUI>();
        textMeshPro.text = "こんにちは、Canvasの世界!";
        textMeshPro.fontSize = 36;
        textMeshPro.color = Color.black;
    }
}

ワールド座標とCanvasでの違い

特徴ワールド座標Canvas上での表示
オブジェクトの種類3Dオブジェクト(TextMeshProUIオブジェクト(TextMeshProUGUI
配置方法Transformによるワールド座標の調整RectTransformによるUI配置
使用用途3Dゲーム内のテキスト表示、目標ラベルユーザーインターフェースのテキスト
レンダリングモードワールド座標Screen Space - Overlay または World Space
シェーダーの影響ライトや影の影響を受けることがあるUIの影響を受けない

注意点

CanvasでのRender Modeの違い

  • Screen Space – Overlay
    デフォルト設定では、テキストは画面上の絶対座標で表示され、スクリーンサイズに依存します。
  • World Space
    Canvas全体をワールド座標上に配置し、他の3Dオブジェクトと同じくワールドの影響を受けます。このモードを使用すると、UI要素を3D空間上で自由に配置できます。

TextMeshProのフォント設定

TextMeshProでは、デフォルトフォントやカスタムフォントを使用することができます。特定のフォントを使用する場合は、プロジェクト内にインポートし、TextMeshPro用のフォントアセットに変換してください。


まとめ

TextMeshProを使用することで、Unityで高品質なテキストを表示できます。ワールド座標とCanvasでの使用には違いがあるため、用途に応じた設定を選択してください。ワールド座標でテキストを表示する場合は、3Dオブジェクトとしてシーン内に配置し、Canvasでの表示はUIとして扱うことで効果的にテキストを活用できます。

関連リソース:

TextMeshPro,Unity

Posted by hidepon