1.ヒエラルキー内にUIを追加します。そのUIを利用してスコアとハイスコアを表示します。 2.Scoreスクリプトを作成します。 3.Destroyerスクリプトを修正します。 4.ゲームを実行して、点数が加算され、画面表示が更新されるか確認します。
ScoreCanvas
ScoreText
ScoreLabel
HighScoreText
HighScoreLabel
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Score : MonoBehaviour { // スコアを表示するUIの取得用 public Text scoreText; // ハイスコアを表示するUIの取得用 public Text highScoreText; // スコアのカウント用 private int score; // ハイスコアのカウント用 private int highScore; // PlayerPrefsで保存するためのキー private string highScoreKey = "highScore"; void Start () { Initialize (); } // ゲーム開始前の状態に戻す private void Initialize () { // スコアを0に戻す score = 0; // highScoreKeyの値で保存されているハイスコアを検索して取得する。保存されてなければ0を取得する。 highScore = PlayerPrefs.GetInt (highScoreKey, 0); } // ポイントの追加。修飾子をpublicにしているので外部より参照できるメソッドになっている public void AddPoint (int point) // 外部より受け取ったint型の引数をpointとして受け取る { score += point; Debug.Log(score); // ここで確認すると、ブロックからの情報が届いているか確認できる。表示されなければ届いていないということになる。 // スコアがハイスコアより大きくなれば、ハイスコアを更新する if (highScore < score) { highScore = score; Debug.Log(highScore); // ハイスコアの更新が正常に行われたか確認できる } // ゲーム画面上のスコアとハイスコアの表示を更新する DisplayScores(); } // ゲーム画面上のスコアとハイスコアの表示を更新する private void DisplayScores(){ // 現在のスコアとハイスコアを画面に表示する scoreText.text = score.ToString (); highScoreText.text = highScore.ToString (); } // ハイスコアの保存 public void Save () { // ハイスコアを保存する PlayerPrefs.SetInt (highScoreKey, highScore); PlayerPrefs.Save (); // ゲーム開始前の状態に戻す Initialize (); } }
private string highScoreKey = "highScore";
ここで設定をしています。
highScore = PlayerPrefs.GetInt (highScoreKey, 0);
ここでは、highScoreKeyにInt型の変数にデータがセーブされているかどうかを確認し、セーブされていればその数値を取り出してhighScoreへ代入しています。なければ0を代代入しています。
PlayerPrefs.SetInt (highScoreKey, highScore);
ここでは、highScoreKeyにhighScoreの数値を参照しています。この状態を作ることで、次のセーブが出来ます。
PlayerPrefs.Save ();
セットした数値をセーブを実行するメソッドです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Destroyer : MonoBehaviour { public int point; <- 追加。インスペクターから点数を登録してください public GameObject masterObj; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnCollisionEnter(Collision collision) { //スコア処理を追加 FindObjectOfType<Score>().AddPoint(point); <- 追加 masterObj.GetComponent<GameMaster>().boxNum--; Destroy(this.gameObject); } }
※ FindObjectOfType<Object>()メソッドは、シーン内の<Object>(ここでは<Score>スクリプト)を参照して、そのスクリプトのAddPointメソッドにアクセスするメソッドです。
対象を特定できる場合には「GetComponent」、不特定な誰かの中から情報を参照して、その個人情報にアクセスする場合には「FindObjectOfType」を利用します。