まえがき
スコアなど、ゲーム中に値が変動する数字をUIのTextMeshProで表示する方法について説明していきます。
Textの用意
UI → TextMeshProを作成して下さい。今回は Score Text という名前にしておきます。
※プロジェクト内で初めて作成する場合は、TextMeshProを作成すると表示されるタブからTextMeshProをImportして下さい。
Assetsフォルダ内にTextMesh Proというフォルダが生成されます。
Scriptの用意
Assetsフォルダ内に Score Managerという名前のScriptを作成して下さい。
続いて、内容を以下のコードに書き換えて下さい。
Score Manager
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class ScoreManager : MonoBehaviour
{
public int score = 0;
private TMP_Text scoreText;
// Start is called before the first frame update
void Start()
{
score = 0;
scoreText = GetComponent<TMP_Text>();
scoreText.text = "score:0";
}
// Update is called once per frame
void Update()
{
scoreText.text = "score:" + score.ToString();
}
}
このScriptを先ほど作成したTextMeshProにアタッチして下さい。
スコアの変更方法
今回はスコアを GameManager というScriptから変更できるようにします。(任意のScriptからスコアを変更することが可能です。)
サンプルコード(open属性あり)
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Assertions.Must;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
private GameObject scoreText;
// Start is called before the first frame update
void Start()
{
scoreText = GameObject.Find("ScoreText");
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
scoreText.GetComponent<ScoreManager>().score++;
}
}
}
scoreText変数にTextMeshProのゲームオブジェクトを割り当て、スペースキーが押されたらscoreTextにアタッチされているScoreManagerというScript内のscore変数をインクリメントするという処理のコードです。
よって、実際に使う場合はスコアを増やしたい場所にscoreText.GetComponent().score++;という文を挿入しましょう。
scoreText = GameObject.Find("ScoreText")の部分ではScoreTextという名前のゲームオブジェクトを探してscoreText変数に割り当てているので、作成したTextMeshProの名前と一致させる必要があります。
以上で実装は終了です。実際にPlayしてスコアが変更されてUIに反映されていることを確認して下さい。
あとがき
スコアの実装はゲーム開発でよく行うことなので、慣れておくと良いと思います。