【Unity備忘録2】 テキストUIを設置する方法

アイキャッチ画像 ゲーム制作
スポンサーリンク

こんにちはslashです。
Unity備忘録第2回目
今回はテキストUIを設置する方法です。
テキストUIを設置すれば
ゲーム画面内に文字や数値を表示させたり、
表示内容をリアルタイムで更新する事が可能となります。

下準備

今回は画像等の素材を使用しないため、
特に下準備は必要ありません。

テキストUIのオブジェクトを作成する

ヒエラルキービューの「+」 > 「UI」 > 「Text – TextMeshPro」を選択して
テキストUIのオブジェクトを作成します。
すると、「Text(TMP)」というオブジェクトができます。

図1 テキストUIのオブジェクトを作成

テキストUIオブジェクトの作成をすると、エディターに収まり切らないほどの
大きなオブジェクトが配置される場合がありますが、
その場合は、

ヒエラルキービューの「Canvas」を選択

インスペクタービューの「RenderMode」を「ScreenSpace – Camera」に変更

ヒエラルキービューの「MainCamera」を
ドラッグアンドドロップで「RenderCamera」に設定

これでテキストUIのオブジェクトが
画面内に収まる大きさで表示されるかと思います。

※ここの手順は前回のボタンUIを作った時と同様です。

UIの位置や大きさの設定

移動ツールや拡縮ツールなどを使って
UIの位置や文字の大きさ等をお好みの位置に調整します。

図2 テキストUIの位置調整

ヒエラルキービューの「Text(TMP)」を選択し、
インスペクタービューの「TextMeshPro – Text(UI)」の項目から
フォントサイズ、フォントカラー、太字、イタリックなど
テキストの細かい設定ができます。

また、アンカーの設定もしておきます。
今回はテキストを画面左上付近に置くので
アンカーは「top left」(左上)に設定しました。

スポンサーリンク

ゲーム中に表示内容を更新できるようにする

今回は、
ゲーム起動からの経過時間を表示しリアルタイムで更新し続ける
という動作を作ってみます。

空オブジェクトとスクリプトの作成

ヒエラルキービューの「+」 > 「Create Empty」を選択し、
空オブジェクトを作成します。
これはテキスト内容の制御を行わせるためのオブジェクトなので、
その役割がわかりやすいような名前を付けるとよいかと思います。
ここでは、オブジェクト名は「TextController」とします。

図3 空オブジェクトを作成する

プロジェクトビューにC#Scriptを作成し、
先ほど作成したテキストUIのオブジェクトにアタッチします。
(このスクリプト名も「TextController」としています。)

図4 C#Scriptをアタッチする

スクリプトを書く

先ほど作成したスクリプトを開きます。
以下のように
using TMPro;
と書かれた行を追加します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;//←この行を追加

public class TextController : MonoBehaviour
{

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

TextControllerに制御する対象のオブジェクトを認識させる

さて、ここからは「TextController」に
テキストUIの表示内容を制御させるわけですが、
まずは、どのオブジェクトを制御すればいいのか
指定してあげる必要があります。

そこで、以下のようにスクリプトを更新します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class TextController : MonoBehaviour
{
    public GameObject TextUIObj;//追加箇所

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

ここで、一旦スクリプトを保存します。
その後、ヒエラルキービューの「Text(TMP)」を選択すると、
インスペクタービューに「TextUIObj」という項目が新しく出来ているので、
ここに「Text(TMP)」のオブジェクトをドラッグアンドドロップでアタッチします。
これで「TextUIObj」は制御対象のテキストUIの事を指すようになるため、
テキストの内容を制御する事が可能となります。

図5 テキストUIオブジェクトをTextUIObjに設定

テキスト内容を制御するスクリプトを書く

さらにスクリプトを更新していきます。

public class TextController : MonoBehaviour
{
  public GameObject TextUIObj;
  float TotalTime = 0.0f;//ゲーム起動からの経過時間

// Start is called before the first frame update
    void Start()
    {
        Application.targetFrameRate = 60;//FPSを60に固定
    }

// Update is called once per frame
void Update()
{
   TotalTime += Time.deltaTime;//TotalTimeの値がゲーム起動からの時間となる
   TextUIObj.GetComponent<TextMeshProUGUI>().text = TotalTime.ToString("0.00") + "sec";//TotalTimeの値をテキストUIに表示する
}

まず、float型の変数TotalTimeを用意します。
Update()メソッドにあるTime.deltaTimeは
直前のフレームからの経過時間となります。

Update()メソッド内で、
TotalTime += Time.deltaTime;
これをゲームの起動開始時点から毎フレーム実行し続けると
TotalTimeの値はゲーム起動からの経過時間となります。

次に、このTotalTimeの値をテキストUIに表示させます。
TextUIObj.GetComponent().text = TotalTime.ToString(“0.00”) + “sec”;
これで、制御対象のテキストUIに表示されるテキストが、
例えば「10.00sec」のように
ゲーム起動からの時間がリアルタイムで
カウントアップされるようになります。

補足 ToStringメソッド

ToStringは変数やオブジェクトの中身を文字列に変換するメソッドです。
今回は、以下のようにToStringメソッドを使っています。

TotalTime.ToString(“0.00”);

ToStringの後ろにある(“0.00”)の部分は
小数点第二位まで表示させる、という意味になります。
これを(“0.0”)とすれば小数点第一位までの表示となりますし、
(“0”)とすれば整数部分だけの表示にする事もできます。

ゲームを起動する

ここまでできたら、ゲームを起動して
動作を確認します。

図6 動作の確認

タイトルとURLをコピーしました