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 です。
チャレンジ
簡単上部のZoneTextに、探索者がいるゾーンを表示します。
Explorer.csで、using TMPro;とフィールドpublic TMP_Text zoneText;を追加します。シーンでZoneTextをその名前に紐づけます。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プレイグラウンド