Menu
CoddyTech

Canvasとテキスト

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 1/60。

Unity は UI システムを使って、画面上にテキスト、ボタン、バーを描画します。Unity 6 では、GameObject > UI > Text - TextMeshPro を選ぶと、Text (TMP) という名前のテキストオブジェクトが追加されます。初回は、テキストのフォントに必要な TMP Essentials のインポートを Unity が求めます。シーンにまだ Canvas がない場合は、Unity が Canvas を作成してテキストをその中に配置し、UI のクリックを処理する EventSystem も追加します。Canvas は、カメラがどこを向いていても画面上の固定位置に、カメラの映像の上から子オブジェクトを描画します。このコースのすべてのシーンと同じように、Canvas Scaler を Scale With Screen Size、1920 x 1080、Match 0.5 に設定すると、どの画面サイズでもレイアウトの比率が保たれます。

テキストのコンポーネントは TextMeshPro - Text (UI) です。スクリプトでは、TMPro 名前空間にある基底型 TMP_Text のフィールドに格納し、文字列である text プロパティを通して表示内容を変更します。このスクリプトは、開始時にレベル名を設定します。

using UnityEngine;
using TMPro;

public class LevelIntro : MonoBehaviour
{
    public TMP_Text titleText;

    void Start()
    {
        titleText.text = "World 2: Ice Caves";
    }
}

Hierarchy から Text (TMP) オブジェクトを Inspector の Title Text スロットにドラッグすると、Unity がそのテキストコンポーネントをフィールドに設定します。using TMPro; がないと、TMP_Text という名前を認識できず、スクリプトはコンパイルされません (CS0246)。スロットが空のままだと、最初の titleText.text で UnassignedReferenceException が発生します。スクリプトが書き込む内容は、Inspector で入力した Text Input の内容を置き換えます。新しいテキストオブジェクトでは、初期値は New Text です。

challenge icon

チャレンジ

簡単

上部のZoneTextに、探索者がいるゾーンを表示します。

  1. Explorer.csで、using TMPro;とフィールドpublic TMP_Text zoneText;を追加します。シーンでZoneTextをその名前に紐づけます。
  2. Update()で、コメントの下に、transform.position.xが2未満の間はzoneText.textをZone: Beachに設定し、それ以外の場合はZone: Jungleに設定します。

「プレイ」を押して右に歩き、草地に入ります。テキストがJungleに変わります。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Explorer : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        float move = Input.GetAxisRaw("Horizontal");
        transform.Translate(move * speed * Time.deltaTime, 0f, 0f);

        // ZoneTextにゾーンを表示する: x = 2より小さい場合はZone: Beach、2以上の場合はZone: Jungle
    }
}

本格的なゲームを作るのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド