テキストの操作についてまとめます。
この記事で行う操作は以下の通りです。
ゲーム画面にテキストを配置する
早速、ゲーム画面にテキストを配置していきます。
ヒエラルキー上で右クリック→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にした場合。
テキストのレイヤーが上に来ているので、テキストが前に表示されています。

コメント