1
0

【Unity】スコアをリアルタイムに変更してTextMeshProで表示する方法

Posted at

まえがき

スコアなど、ゲーム中に値が変動する数字をUIのTextMeshProで表示する方法について説明していきます。

Textの用意

UI → TextMeshProを作成して下さい。今回は Score Text という名前にしておきます。

※プロジェクト内で初めて作成する場合は、TextMeshProを作成すると表示されるタブからTextMeshProをImportして下さい。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333835383133342f65333330363530312d396132342d653862332d656432342d6635653463346563393165372e706e67.png

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に反映されていることを確認して下さい。

あとがき

スコアの実装はゲーム開発でよく行うことなので、慣れておくと良いと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0