今回は他のスクリプトから参照可能なスコアボードを作りたいと思います。
たった数行で出来るのでとても簡単です!
作り方
ScoreBoard
まずはヒエラルキー内で右クリックをしてUIの中にあるTextMeshProをクリックしてください。
今回はサンプルなので色と数字だけ変えておきたいと思います。位置を変えたい人は位置も変えましょう。
プロジェクト内で右クリックをして作成の中にあるC#スクリプトをクリックしてください。
スクリプト名は何でもいいですが、今回はScoreBoardという名前にしたいと思います。
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class ScoreBoard : MonoBehaviour { public TextMeshProUGUI ScoreText; //TextMeshProUGUIを参照 public static int Score = 0; //Scoreの値を0 public staticにすることによって他のスクリプトから参照することが出来る // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { ScoreText.text = "" + Score; //Scorの合計値をテキストに表示 ScoreBoard.Score += 1;を他のスクリプトに追加すると1スコア追加できる } }
それでは今作成したスクリプトを開いて書き込みましょう。これで本体は完成です。
解説
using TMPro;
using TMPro;を最初に書いておくことによってTextMeshProが使えるようになります。
これは良く忘れがちだと思うので覚えておきましょう。
public TextMeshProUGUI scoreText;
public TextMeshProUGUI scoreText;とは、TextMeshProUGUIクラスにscoreTextという名前の変数を設定します。
public static int Score = 0;
public static int Score = 0;ではなくint Score = 0;でいいと思った方いませんか?
実はpublic staticを付けないと他のスクリプトから参照できないんです!
ScoreText.text = “” + Score;
ScoreText.text = “” + Score;とはScoreText変数のtextをスコアにするという意味です。
何言ってるかわかりずらいと思いますが、Scoreの値がそのまま反映されるという事です。
ちなみにダブルクオーテーションは本来なら数字や文字などを入れると思いますが、入れないでください。入れて試してみると不必要という事が分かります。ぜひ試してみてください。
ScoreCount
それでは次にスコアの値を変えるスクリプトを作りたいと思います。
プロジェクト内で右クリックをして作成の中にあるC#スクリプトをクリックしてください。
スクリプト名は何でもいいですが、今回はScoreCountという名前にしたいと思います。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScoreCount : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) // 左クリック { ScoreBoard.Score += 1; // スコア +1 } if (Input.GetMouseButtonDown(1)) //右クリック { ScoreBoard.Score -= 1; // スコア -1 } } }
それでは今作成したスクリプトを開いて書き込みましょう。これでスコアカウントは完成です。
解説
if(Input.GetMouseButtonDown(?))
if(Input.GetMouseButtonDown(?))はもしマウスクリックされたらという意味です。
?の部分には0か1が入り0が左クリックで1が右クリックです。
ScoreBoard.Score ?= 1;
ScoreBoard.Score ?= 1;とはScoreBoardスクリプトのScoreに代入するという意味です。
?の部分には+か-が入り+なら足すで-なら引きです。そのままの意味です。
スクリプトアタッチ
それでは作成したスクリプトをアタッチしましょう。
まず適当に空のゲームオブジェクトを作りましょう。ちなみにCanvasにアタッチしても問題ありません。
そしたらそのGameObjectに先ほど作った二つのスクリプトをアタッチしましょう。
ScoreBoardスクリプトにText(TMP)をアタッチしましょう。これで完成です。
後は実行して左クリックで値が増えて右クリックで値が減れば完成です。
改変したい場合はScoreCountの方を改変しましょう。ScoreBoardは基板なので改変しないようにしましょう。