シーンを再ロードしても、変数がずっと保持されるように、スクリプトを作成しましょう。
今回は、ハイスコアがずっと表示される仕組みをつくります。
Sphereをクリックするたびに点数が入り、最高点になれば、ハイスコアが更新。
もう一度ゲームプレイしても、ハイスコアはリセットされずに、新記録がずっと保持されます。
関連記事:
ハイスコアをリセットする
ベストタイムを表示する
Prefabに触れると得点が入る
タイマーによる成績で評価ランク
TextMeshProを使用したタイムアップのしくみ
点数によるABC評価ランク
PlayerPrefsを使ってセーブする
Sphereをいくつか複製して、まばらに配置します。
空のオブジェクトを作成します。
ScoreCount.csを作成し、GameObjectに追加します。
ScoreCount.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScoreCount : MonoBehaviour { public int score; public int highScore; void Start() { score = 0; highScore = PlayerPrefs.GetInt("SCORE", 0); } void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(ray, out hit)) { Destroy(hit.collider.gameObject); score++; } } if(highScore < score ) { highScore = score; PlayerPrefs.SetInt("SCORE", highScore); PlayerPrefs.Save(); } Debug.Log(highScore); } } |
ゲームプレイして、Sphereを3個クリックしてみましょう。
いったん、プレイを終了します。
もう一度プレイしてみましょう。
ハイスコアとして、コンソールに3が表示されています。
Sphereを3個以上クリックすれば、ハイスコアに新記録が更新されます。
PlayerPrefsによって、セーブとロードの機能を実装できます。
PlayerPrefs.GetInt(第一引数, 第二引数)
第一引数にはキーを登録します。
ここではSCOREという登録キーでロードしますが、第二引数に何も保存されていないときは、0を返すようにします。
そして、ScoreがhighScoreを上回れば、Scoreの数値をセットします。
PlayerPrefs.SetInt(第一引数, 第二引数)
SCOREキーに、highScoreの値を保存。
最後に PlayerPrefs.Save()を書き、変更された値をディスクへと保存します。
関連記事:
ハイスコアをリセットする
ベストタイムを表示する
Prefabに触れると得点が入る
タイマーによる成績で評価ランク
TextMeshProを使用したタイムアップのしくみ
点数によるABC評価ランク