気軽に遊べるミニゲームを制作しています

ブラウザゲームまとめ

Unity テキストの操作

Unity2D

テキストの操作についてまとめます。
この記事で行う操作は以下の通りです。

ゲーム画面にテキストを配置する

早速、ゲーム画面にテキストを配置していきます。

ヒエラルキー上で右クリック→UI→Legacy→Textを選択

画面右側のインスペクターに表示されたCanvas内のRender Modeの右に
表示されているScreen Space – OverLayを選択。
リストの中から Screen Space – Cameraを選択する。

Render CameraにMain Cameraをドラッグ&ドロップ
*Canvasのインスペクター画面をロックしておくと便利です。
編集後、再度鍵マークを押してロックを解除。

テキストの編集(インスペクター上での操作)

Width, Height → テキストオブジェクトのサイズを変更します。
         文字自体の大きさは変わりませんが、文字を大きく表示したいとき、
         ここが小さいと表示されません。

Text下の文字 → 表示するテキストを変更します。

Font Style, Font Size → Bold(太字) にしたり、文字自体の大きさが変わります。

Alignment → 文字を左寄せや中央寄せに変更します。

Color → 文字色を変更します。

上の設定を適用した場合、表示される文字は下のようになります。

インスペクターにドロップしたテキストを変更する .text = “”;

コードでテキストを変更していきます。
名前はなんでも良いですが、TextChangeとします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  //追加するのを忘れがち

public class TextChange : MonoBehaviour
{
    public Text testTxt;

    // Start is called before the first frame update
    void Start()
    {
        testTxt.text = "変更しました!";
    }

}

文字が大きいですが…ゲーム開始後、テキストが変更されました。

*応用
スコア表示など、変更したくない文字列もあると思います。
そんなときは、$マークと{変数名}を使います。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextChange : MonoBehaviour
{
    public Text testTxt;
    private int Score = 100;

    // Start is called before the first frame update
    void Start()
    {
        testTxt.text = $"今回のスコアは{Score.ToString()}";
        //Scoreはint型なので、ToString()で文字列に変換します。
    }

}

Score変数以外は固定文字で表示されました。

テキストを非表示にする .enabled = false;

任意のタイミングでテキストを非表示にします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextChange : MonoBehaviour
{
    public Text testTxt;
    private int Score = 100;

    // Start is called before the first frame update
    void Start()
    {
        testTxt.text = $"今回のスコアは{Score.ToString()}";
        //Scoreはint型なので、ToString()で文字列に変換します。
    }

    private void Update()
    {
        Invoke("TextDelete", 3);  //3秒後にテキストを非表示にする
    }

    private void TextDelete()
    {
        testTxt.enabled = false;
    }
}

Invoke関数で3秒後に非表示にしました。

テキストを改行する \n

文字列の中に\nを書きます。/nではありません。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextChange : MonoBehaviour
{
    public Text testTxt;

    // Start is called before the first frame update
    void Start()
    {
        testTxt.text = "1列目\n2列目";
    }

}

ローカライズする Application.systemLanguage

デバイスの言語設定が日本語か、それ以外で表示するテキストを変更します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextChange : MonoBehaviour
{
    public Text testTxt;
    public string Japanese;
    public string English;

    // Start is called before the first frame update
    void Start()
    {
        if (Application.systemLanguage == SystemLanguage.Japanese)  //デバイスの言語設定が日本語の時
        {
            testTxt.GetComponent<Text>().text = Japanese;
        }
        else
        {
            testTxt.GetComponent<Text>().text = English;
        }
    }

}

インスペクターで表示する文字列を入力

OSの言語によって、表示される言語が変更されます。

*改行版
 前述の\nを使って、改行表示できるようにしてみます。
以下のコードではListを使用しています。
Listって何?という方はこちら

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextChange : MonoBehaviour
{
    public Text testTxt;
    public List<string> Japanese = new List<string>();
    public List<string> English = new List<string>();

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

        if (Application.systemLanguage == SystemLanguage.Japanese)  //デバイスの言語設定が日本語の時
        {
            for (int i = 0; i < Japanese.Count; i++)
                testTxt.text += Japanese[i] + "\n";
        }
        else
        {
            for (int i = 0; i < English.Count; i++)
                testTxt.text += English[i] + "\n";
        }
    }

}

改行表示されました。

おまけ. オブジェクトが邪魔でテキストが見えないとき

ゲームオブジェクトがテキストより前に来て、肝心のテキストが見えない時。

ゲームオブジェクトのレイヤーをCanvasよりも下げる or キャンバスのレイヤーをゲームオブジェクトよりも上げることで、テキストが前に表示されます。

ゲームオブジェクトを-1にした場合。
テキストのレイヤーが上に来ているので、テキストが前に表示されています。

コメント

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