(日記のまとめページはこちら:https://wakky.tech/unity-baseball-game/)
前回まではゲームのメイン部分を作成して、一応ゲームとしての体裁は整った。この手のミニゲームにはハイスコアは必要不可欠だと思う。……ということで、今回はPlayerPrefsという機能を使って、ハイスコアを実装していきたい。PlayerPrefsの詳細はこちら。
https://docs.unity3d.com/jp/530/ScriptReference/PlayerPrefs.html
まずはCanvasにハイスコア表示用のObject、HighScoreCharaとHighScoreNumを追加し、ScoreChara、ScoreNumの下に配置する。
次に、AddScore.csとCountDownTimer.csに変更を加える。まずはAddScore.csから。
ポイントだけ説明すると、まずscoreを外部から触れるようにpublicにする。(※小規模のゲームだからpublicにして外部のクラスから触れるようにしてるけど、大規模なゲームをつくるときにはセッターとゲッターを設定した方が安全だと思う。)また、新たな変数highScoreとhighScoreTextを追加して、ハイスコア表示をできるように変更した。ここでPlayerPref.GetIntを使って、
highScore = PlayerPrefs.GetInt(“HighScore”);
でゲーム開始時にhighScoreを読み込むようにする。ちなみにキー(HighScore)に何も値が入っていないときのPlayerPrefs.GetIntのデフォルト値は0なので、特にif文でケアしたりはしていない。この値を
highScoreText.text = “” + highScore.ToString();
でhighScoreText.textに入れ、スコアを表示させたときと同じ要領で、画面上のテキストに表示を行う。
次に、CountDownTimer.csの変更。
変更点は以下の部分。
if(PlayerPrefs.GetInt(“HighScore”) < AddScore.score){
PlayerPrefs.SetInt(“HighScore”,AddScore.score);
}
キー・HighScoreに保存してあるIntの値を読み出し、先ほどAddScore.csでpublicにしたscoreと比較する。そして、キーに保存してある値よりscoreが大きい時(つまりハイスコア更新したとき)には、現在のscoreの値を新たにキーHighScoreに保存する。これでハイスコアの実装ができ、ゲームとしての体裁は整った。次回はメインのゲーム機能から離れて、ゲームのタイトル画面を作りたいと思う。