はじめに
今回はデバッグ感覚で簡易的にスコアを表示してみたいと思います。敵を倒したときのスコアを実装する際にすぐに確認できるようにしてみます。
スコアを表示する準備
まず最初にテキストを表示します。
Hierarchy→UI→TextMeshProを選択し、テキストを表示させます。
テキストのオブジェクトを作るとTextMeshProの機能がインポートされていないと真ん中にインポートするボタンが表示されるのでImport TMP Essentialsを選択してインポートしてください。
インポートすると画面のどこかにNew Textが表示されます。
スクリプトからスコアを表示
表示できたら次はスクリプトからスコアを表示してみましょう。
適当にScoreというファイル名でスクリプトを作ります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class Score : MonoBehaviour
{
[SerializeField]
TextMeshProUGUI _scoreText;
private int _score = 0;
// Start is called before the first frame update
void Start()
{
_scoreText.text = _score.ToString();
}
// Update is called once per frame
void Update()
{
}
}
スクリプトからTextMeshProを使うときはusing TMProを書かないと使えないのでそこだけ注意してください。
Score.csを先程作成したText(TMP)にアタッチしてください。アタッチしたら
Text(TMP)をText(TMP)のインスペクター→Score(Script)のScore Textにドラッグして入れてください。
できたら実行してみてください。New Textが0になって表示されていると思います。
スコアを加算してみる
スコアを表示できたら今度はスコアを加算してみたいと思います。
先程のScoreスクリプトにスコアを加算するスクリプトを追加します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class Score : MonoBehaviour
{
[SerializeField]
TextMeshProUGUI _scoreText;
private int _score = 0;
// Start is called before the first frame update
void Start()
{
_scoreText.text = _score.ToString();
AddScore(1000);
}
// Update is called once per frame
void Update()
{
}
public void AddScore(int value)
{
_score += value;
_score = Mathf.Clamp(_score, 0, 999);
_scoreText.text = _score.ToString();
}
}
26行目のAddScoreが加算するスクリプトです。Mathf.Clampはスコアの下限、上限を設定しています。今回は0~999の範囲を設定しています。
スコア加算したあとはテキストを更新しています。Updateで毎回テキストを現在のスコアで更新するよりはスコアの値が変動したときに一度だけ更新してあげるほうが処理は軽くなります。今回はStart関数でスコアを+1000しています。
これで実行してみるとスコアが更新されていて、999に制限されていると思います。
まとめ
今回は敵を倒したときのスコア表示をすぐに実装して確認できるように簡易版で作成してみました。次回はScriptableObjectを使ってスコアの管理をもう少し簡単に使いやすくしてみようと思います。