せっかく調整してもらった音量設定が、ゲームを再起動したら元どおり——データを保存しないゲームは、起動するたびに「初対面」に戻ってしまいます。音量・画質・ハイスコアといった小さなデータをいちばん手軽に保存できるのが、Unity標準の PlayerPrefs です。
この記事では、PlayerPrefsの基本的な使い方(Set/Get/Save)と、その手軽さの裏にある注意点・使ってはいけないケース、そして実際のオプション画面への組み込みまでを解説します。
この記事でわかること
PlayerPrefsの基本——キーと値のペアで保存する仕組みSet/Getメソッドと デフォルト値の鉄則Save()を呼ぶタイミング(クラッシュ対策)- 使ってはいけないケース——暗号化されない・3型しか扱えない
- 設定はPlayerPrefs、セーブデータはJSONファイル、の使い分け
PlayerPrefsの基本的な使い方
PlayerPrefsは、3種類のデータ型(int, float, string)のみをサポートしています。それぞれのデータ型に対応したSetメソッド(保存)とGetメソッド(読み込み)が用意されています。

データの保存: Setメソッド
データを保存するには、SetInt(), SetFloat(), SetString()メソッドを使います。第一引数にデータを識別するためのキー(文字列 )、第二引数に保存したい値を指定します。
using UnityEngine;
public class GameSettings : MonoBehaviour
{
public void SaveVolume(float volumeLevel)
{
// "MasterVolume"というキーで、float型の音量データを保存
PlayerPrefs.SetFloat("MasterVolume", volumeLevel);
}
public void SaveHighScore(int score)
{
// "HighScore"というキーで、int型のハイスコアを保存
PlayerPrefs.SetInt("HighScore", score);
}
}
重要: Setメソッドを呼び出しただけでは、データはまだメモリ上にあり、ディスクには書き込まれていません。ゲームがクラッシュした場合などにデータが失われるのを防ぐため、重要なデータを保存した直後にはPlayerPrefs.Save()を呼び出して、明示的にディスクへの書き込みを指示するのが安全です。
public void SaveAllSettings()
{
PlayerPrefs.SetInt("QualityLevel", 2);
PlayerPrefs.SetFloat("MusicVolume", 0.8f);
// メモリ上の変更をディスクに即座に書き込む
PlayerPrefs.Save();
}

データの読み込み: Getメソッド
保存したデータを読み込むには、GetInt(), GetFloat(), GetString()メソッドを使います。第一引数に、保存時に使ったキーを指定します。
このとき、第二引数としてデフォルト値を指定することが非常に重要です。指定したキーのデータが存在しない場合(例: ゲームの初回起動時)、このデフォルト値が返されます。デフォルト値を指定しないと、キーが存在しない場合に0や空文字が返され、意図しない挙動の原因となります。

using UnityEngine;
using UnityEngine.UI;
using TMPro; // テキスト表示はTextMeshProが現在の標準
public class LoadSettings : MonoBehaviour
{
public Slider volumeSlider;
public TextMeshProUGUI highScoreText;
void Start()
{
// "MasterVolume"キーのデータを読み込む。存在しない場合はデフォルト値1.0fを使う。
float savedVolume = PlayerPrefs.GetFloat("MasterVolume", 1.0f);
volumeSlider.value = savedVolume;
// "HighScore"キーのデータを読み込む。存在しない場合はデフォルト値0を使う。
int highScore = PlayerPrefs.GetInt("HighScore", 0);
highScoreText.text = "High Score: " + highScore;
}
}
tips: テキスト表示に旧
TextではなくTextMeshProUGUIを使う理由は TextMeshProの記事 を参照してください。
その他の便利なメソッド
PlayerPrefs.HasKey(string key): 指定したキーのデータが存在するかどうかをbool値で返します。初回起動時の処理を分岐させたい場合などに便利です。PlayerPrefs.DeleteKey(string key): 指定したキーのデータを削除します。PlayerPrefs.DeleteAll(): すべてのPlayerPrefsデータを削除します。ゲームのリセット機能などで使いますが、非常に強力なため取り扱いには注意が必要です。
PlayerPrefsの注意点と限界
PlayerPrefsは非常に手軽で便利ですが、万能ではありません。使うべきでないケースを理解しておくことが重要です。
1. セキュリティの問題
PlayerPrefsで保存されるデータは、暗号化されていません。少し知識のあるユーザーであれば、保存されたファイルを簡単に見つけ出し、内容を書き換えることができてしまいます。ハイスコアや所持金といった、改ざんされると困るような重要なデータをPlayerPrefsでそのまま保存するのは非常に危険です。
