今回は、Unityで「ゲーム内の設定」や「ハイスコア」などをPlayerPrefsを利用して簡単に保存する方法のメモです。
はじめに
Unityのバージョンは2021.3.14f1で実装していきます。(大体のバージョンで同じ方法です)
下記が公式のスクリプトリファレンスです。
実装例
「最高スコアを保存」、「保存した最高スコアを読み込む」を簡単に実装していきます。セーブ・ロード機能ですね、情報の保存先は各端末のレジストリです。
簡単なUIを作成
「UI」→「Legacy」→「Text」を選択します。
名前をScoreに変更して、位置やサイズ、テキスト内容を変更します。
スコアマネージャーの作成
「Create Empty」で空のオブジェクトを追加します。名前はScoreManagerにします。
データを記憶する(セーブ機能)
下記スクリプトを作成します。SetHighScoreを呼び出せば「highscore」というキーにパラメータのvalue値(スコア)が保存されます。
using UnityEngine; public class ScoreManager : MonoBehaviour { public void SetHighScore(int value) { PlayerPrefs.SetInt("highscore", value); } }
最高スコアを保存したい場合、ゲーム終了時に「現在のスコア」と「最高スコア」を比較して保存する感じになると思います。
データを呼び出し(ロード機能)
ゲーム起動時にハイスコアを読み込んで画面に表示するので下記に変更します。値が保存されて無い場合の初期値は0でセットしています。
using UnityEngine; using UnityEngine.UI; public class ScoreManager : MonoBehaviour { [SerializeField] private Text _highscoreText; void Start() { int highScore = PlayerPrefs.GetInt("highscore",0); _highscoreText.text = "HIGH SCORE: " + highScore.ToString(); } public void SetHighScore(int value) { PlayerPrefs.SetInt("highscore", value); } }
スクリプトをScoreManagerに追加して、パラメータのテキストオブジェクトをセットします。
データ削除(スコアリセット)
記録してあるデータを削除する場合は下記の様な感じです。
public void DelHighScore() { // 特定のキーと値のみ削除 PlayerPrefs.DeleteKey("highscore"); // 全部のキーと値を削除 PlayerPrefs.DeleteAll(); }
補足
PlayerPrefsはレジストリに値が保存してあるので、設定の保存やオフラインゲームで利用と言う感じですね。重要なデータの保存には向いていないですね。あくまでも簡易的なデータの保存ですね。