【Unity】Unityで3D野球盤をつくろう日記 27日目:ハイスコアを記録する(PlayerPrefsで値を保存)

投稿日:2018年4月10日
最終更新日:2019年1月19日

(日記のまとめページはこちら: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に保存する。これでハイスコアの実装ができ、ゲームとしての体裁は整った。次回はメインのゲーム機能から離れて、ゲームのタイトル画面を作りたいと思う。


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください