この記事について
この記事では PlayerPrefs を使ってデータを保存・読み込みする方法について解説します。
小規模なセーブデータや設定保存などに便利で、Unity標準で提供されている仕組みです。
※PlayerPrefsは公式から非推奨とされていますので、重要なデータの保存はやめておきましょう。

この記事でわかること
- PlayerPrefs とは何か
- 保存できるデータ型(int, float, string)
- 保存・読み込み・削除の方法
データの保存とは?
Unityで使用できるデータの保存方法は複数あります。以下のサイトを参考にして下さい。
PlayerPrefsとは?
PlayerPrefs は、Unity が提供する 簡易的な永続データ保存機能 です。
データは端末(PCやスマホ)のローカルに保存され、アプリを終了しても保持されます。
保存できるデータ型は以下の3種類です。
- int(整数)
- float(小数)
- string(文字列)
データの保存場所
PlayerPrefsで保存する場合は保存場所がWindowsやMacbookだと「Company Name」と「Product Name」に依存します。これらの設定はProject Settingsの画像の場所です。

次にデータの保存場所ですが、OSによって異なります。保存場所は以下の通りです。
プラットフォーム | 保存場所 | 補足 |
---|---|---|
Windows | レジストリ HKEY_CURRENT_USER\Software\[CompanyName]\[ProductName] | [CompanyName] / [ProductName] は Project Settings > Player で設定した値 |
Windows (UWP) | アプリのローカル設定領域 | レジストリには保存されない |
macOS | ~/Library/Preferences/unity.[CompanyName].[ProductName].plist | defaults read unity.[CompanyName].[ProductName] で確認可能 |
iOS | NSUserDefaults <App Sandbox>/Library/Preferences/[bundleid].plist | [bundleid] = バンドルID |
Android | SharedPreferences /data/data/[bundleid]/shared_prefs/[bundleid].xml | root 端末や Android Studio で確認可能 |
Linux | ~/.config/unity3d/[CompanyName]/[ProductName]/prefs | テキストファイル形式 |
ただし、実はビルドの時はデータの保存場所が異なるのでWindows11で説明していきます。
- 「Windows +R」でレジストリエディターを開く
- 「HKEY_CURRENT_USER」→「Software」→「Unity」→「UnityEditor」→「Company Name」→「Product Name」

PlayerPrefsでデータ操作
PlayerPrefsの準備
まずはヒエラルキーで右クリックをして空のGameObjectを1つ用意します。
・「右クリック」→「Create Empty」
次にスクリプトを作成して先ほどのCreate Emptyにアタッチしてください。

データを保存する(Set)
データの保存は「SetInt , SetFloat , SetString」で保存できます。Set(第一引数,第二引数)となっており、データを扱うときは第一引数を「Key(キー)」、第二引数を「Value(バリュー)」と言うことが多いです。
using UnityEngine;
public class Data_PlayerPrefs : MonoBehaviour
{
void Start()
{
// int型の保存
PlayerPrefs.SetInt("Int", 100);
// float型の保存
PlayerPrefs.SetFloat("Float", 0.8f);
// string型の保存
PlayerPrefs.SetString("String", "Test");
// 実際に保存を確定
PlayerPrefs.Save();
}
}
実行してみると、それぞれデータが保存されましたね。
※投稿者は読み方がわかりませんが、型が先頭にあるのでわかりました。

データの読み込み(Get)と存在確認(HasKey)
データを保存するということはデータの読み込みもします。データの読み込みには「GetInt , GetFloat , GetString」を使用します。ただし、存在しないデータを読み込むとエラーが起きます。それを回避するためにデータの存在確認を「HasKey」で行います。
using UnityEngine;
public class Data_PlayerPrefs : MonoBehaviour
{
void Start()
{
//存在するデータ
if (PlayerPrefs.HasKey("Int"))
{
int i = PlayerPrefs.GetInt("Int"); //データの読み込み
Debug.Log("データ: " + i);
}
//存在しないデータ
if (PlayerPrefs.HasKey("Score"))
{
Debug.Log("データあり");
}
else
{
Debug.Log("データなし");
int highScore = PlayerPrefs.GetInt("Score", 10); // デフォルト値 10
}
//存在しないデータ
if (PlayerPrefs.HasKey("Score"))
{
Debug.Log("データあり");
}
}
}
実行してみると、存在するデータと存在しないデータの確認が取れましたね。
「GetXxx(key, defaultValue)」 として書くと、データが存在しない場合にデフォルト値を返してくれます。しかし、その後に確認してもデータはありません。つまり保存しているわけではありません。

削除する(Delete)
データを扱う上でデータの削除も必須です。そのような時に特定のデータの削除「DeleteKey(“Key”)」、全てのデータを削除「DeleteAll」を使用します。
using UnityEngine;
public class Data_PlayerPrefs : MonoBehaviour
{
void Start()
{
// 特定のキーを削除
PlayerPrefs.DeleteKey("Int");
}
}
実行してみるとIntだけ消えましたね。

それでは最後にすべてのデータを削除して終わりましょう。
using UnityEngine;
public class Data_PlayerPrefs : MonoBehaviour
{
void Start()
{
// 全データを削除
PlayerPrefs.DeleteAll();
}
}
実行してみると、データがすべて削除されましたね。(最初からあるデータは見せたらダメな気がして隠してます。)

注意点
- 保存できるのは int, float, string のみ
- データ量が多い場合は不向き(セーブデータやアイテム管理はJSON 保存の方が適切)
- データはユーザーが改ざん可能なので、チート対策にはならない
まとめ
- PlayerPrefs は「BGMやオプションデータ等の保存」に便利
- int / float / string を保存・取得できる
- Set / Get / Delete を使いこなせば基本はOK