設定やスコアを簡単に保存しておくPlayerPrefs【Unityメモ】

今回は、Unityで「ゲーム内の設定」や「ハイスコア」などを保存する方法のメモです。

保存方法はいくつかありますが、一番簡単(であろう)PlayerPrefsで実装していきます。

はじめに

Unityのバージョンは2021.3.14f1で実装していきます。(大体のバージョンで同じです)

下記が公式のスクリプトリファレンスです。ゲーム セッション間のプレーヤーの設定を保存するクラスとあります。

実装例

「最高スコアを保存」、「保存した最高スコアを読み込む」を簡単に実装していきます。セーブ・ロード機能ですね、情報の保存先は各端末のレジストリです。

簡単にUIを作成

「UI」→「Legacy」→「Text」を選択。

名前をSCOREに変更して、位置やサイズ、テキスト内容を変更します。

スコアマネージャーの作成

「Create Empty」で空のオブジェクトを追加。名前はScoreManagerにします。

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);
    }
}

後はインスペクターでテキストオブジェクトをセット。

実行すると下記のように感じに。

データ削除

レジストリからデータを削除する場合は下記の様な感じ。

    public void DelHighScore()
    {
        //特定のキーと値のみ削除
        PlayerPrefs.DeleteKey("highscore");

        //全部のキーと値を削除
        PlayerPrefs.DeleteAll();
    }

補足

レジストリに値が保存してあるので、簡単な設定の保存やローカルゲーム限定と言う感じですかね。

タイトルとURLをコピーしました