エディタで何度もテストプレイしたのに、ビルドしたゲームを起動するとセーブが1つもない。あるいは「最初からやり直したい」のに、どこを消せばデータがリセットされるのか分からない。Unityのセーブデータでつまずく人の多くは、書き込み方ではなく「保存場所」で迷っています。
この記事では、UnityのセーブデータがWindows・Mac・Android・WebGLでそれぞれどこに保存されるかを、ファイル保存(Application.persistentDataPath)とPlayerPrefsに分けて一覧にします。あわせて、エディタから保存フォルダを一発で開くスクリプト、データの削除方法、保存場所を変えたいときの考え方までまとめました。
パスは2026年10月時点のUnity 6.2の公式スクリプトリファレンスで確認しています。Unity 6系なら、ほかのバージョンでも中身は同じです。
Unityのセーブデータは「2種類」あって場所が違う
最初に押さえておきたいのは、Unityの保存先が1つではないという点です。セーブの作り方によって、データの置き場所がまったく変わります。
ひとつは、JSONなどのファイルに書き出す方法。JsonUtilityでクラスを文字列にして、File.WriteAllTextで書き込む形ですね。この場合の保存先は、ほぼ必ず Application.persistentDataPath の下になります。このブログのJSONを使ったセーブ・ロードの記事で書いたコードも、この場所に保存しています。
もうひとつは PlayerPrefs。音量やハイスコアのような小さな値をキーと値の組で保存する仕組みで、こちらはファイルとは限りません。Windowsならレジストリ、Macならplistファイル、AndroidならSharedPreferencesに入ります。
つまり「セーブデータの場所」を探すときは、自分のゲームがどちらの方法で保存しているかを先に確かめる必要があります。両方使っているゲームも多いので、どちらも見られるようにしておくと安心です。
PlayerPrefsとJSON、それにアセットを使った方法の違いは、こちらの記事で比べています。
persistentDataPathの保存場所一覧(Windows・Mac・Android)
まずはファイル保存の場所から。公式リファレンスに書かれているパスを、プラットフォームごとに並べるとこうなります。<companyname> と <productname> には、Player Settings の Company Name と Product Name が入ります。
| プラットフォーム | Application.persistentDataPath の場所 |
|---|---|
| Windows(エディタ・ビルド) | %userprofile%\AppData\LocalLow\<companyname>\<productname> |
| Mac(エディタ) | ~/Library/Application Support/<companyname>/<productname> |
| Mac(ビルド) | ~/Library/Application Support/unity.<companyname>.<productname> |
| Linux | $XDG_CONFIG_HOME/unity3d または $HOME/.config/unity3d |
| Android | /storage/emulated/<userid>/Android/data/<packagename>/files |
| iOS | /var/mobile/Containers/Data/Application/<guid>/Documents |
| WebGL | /idbfs/<hash>(ブラウザのIndexedDBの中) |
Company Name を何も変えていないプロジェクトだと、初期値の「DefaultCompany」がそのまま入ります。Windowsで探すなら、エクスプローラーのアドレス欄に %userprofile%\AppData\LocalLow と打ち込んでEnter。DefaultCompany というフォルダの中に、プロジェクト名のフォルダが見つかるはずです。
AppData は隠しフォルダなので、普通にCドライブからたどっても表示されません。「ユーザーのフォルダを開いたのにAppDataがない」と迷う人が多いのはこのためで、アドレス欄に直接打つのが一番早いと思います。
Windowsでエディタとビルドが同じ場所になる点に注意
表を見ると分かるとおり、Windowsではエディタで遊んだときもビルドしたexeで遊んだときも、ファイルの保存先は同じフォルダです。エディタで作ったテスト用のセーブが、ビルド版を起動したときにも読み込まれるわけですね。
「配布前の動作確認で、まっさらな状態から始めたつもりがセーブが残っていた」という失敗はここから起きます。リリース前に一度フォルダの中身を消してから確認するのが確実です。
Macはエディタとビルドでパスの形が違います。ただ、公式リファレンスには「ビルド版でも、エディタ用のフォルダがすでにあればそちらを使う」と書かれているので、Macでも結局同じデータを読むことがあります。
Androidの保存場所と、アンインストールで消える話
Androidの persistentDataPath は、多くの端末で /storage/emulated/0/Android/data/パッケージ名/files です。パッケージ名は Player Settings の Package Name(例: com.DefaultCompany.MyGame)。古い機種ではSDカード側を指すこともある、と公式リファレンスに注記があります。
この「Android/data/パッケージ名」はアプリ専用の領域で、アプリをアンインストールすると中身も一緒に消えるのがAndroidの決まりです。一方、アプリのアップデートでは消えません。テスト中に「インストールし直したらセーブが消えた」となるのは正常な動きなんです。
端末の中を直接のぞきたいときは、PCにUSBでつないで adb を使うのが手軽です。Android 11以降はスマホのファイルアプリから Android/data を開けない機種が増えているので、Android Studio の Device Explorer か、次のコマンドで取り出すのがいいと思います。
adb pull /sdcard/Android/data/com.DefaultCompany.MyGame/files ./save_backup
パッケージ名の部分は自分のゲームのものに置き換えてください。
WebGLはブラウザの中に保存される
WebGLでは、ファイルはPCのフォルダではなくブラウザのIndexedDBに入ります。公式リファレンスによると、パスの <hash> は「ページが置かれているディレクトリのURL」から作られるとのこと。
これが意味するのは、ゲームを別のURLに置き直すとセーブが引き継がれない、ということです。ファイル名(index.html)やURLの後ろに付く ?以降 は関係ないと書かれているので、変わるのは置き場所のディレクトリを移したときですね。ブラウザのサイトデータを消したときも、当然セーブは消えます。
PlayerPrefsの保存場所(Windowsはレジストリ)
次はPlayerPrefsです。こちらはOSごとの仕組みに保存されるので、ファイルを探しても見つからないことがあります。
| 環境 | PlayerPrefs の保存先 |
|---|---|
| Windows(ビルド) | レジストリ HKEY_CURRENT_USER\Software\<companyname>\<productname> |
| Windows(エディタ) | レジストリ HKEY_CURRENT_USER\Software\Unity\UnityEditor\<companyname>\<productname> |
| Mac | ~/Library/Preferences/com.<companyname>.<productname>.plist |
| Linux | ~/.config/unity3d/<companyname>/<productname> |
| Android | /data/data/パッケージ名/shared_prefs/パッケージ名.v2.playerprefs.xml |
| iOS | NSUserDefaults(ファイルの場所は公開されていない) |
| WebGL | ブラウザのIndexedDB(最大1MB) |
ファイル保存と違って、WindowsのPlayerPrefsはエディタとビルドで保存先が分かれています。エディタで設定した音量がビルド版に引き継がれないのはこのためです。
レジストリを見るには、Windowsキー+Rで「regedit」と入力してレジストリエディターを開き、上の表のキーをたどります。エディタ側のキー名は「Score_h1234567890」のように後ろに数字が付いた形になっていて、少し驚くかもしれません。公式リファレンスによると、大文字と小文字を区別するためにキー名をハッシュ化しているそうです。
レジストリエディターで関係ないキーを消すと、ほかのソフトやWindowsそのものが動かなくなることがあります。消すのは自分のプロジェクトの Company Name / Product Name のキーだけにして、慣れないうちは後で紹介する PlayerPrefs.DeleteAll やメニューからの削除を使ってください。
AndroidのPlayerPrefsが入る /data/data 以下は、root化していない端末ではアプリ本人しか読めない場所です。PCから中身を確認するのは難しいので、Android向けのゲームでは「PlayerPrefsは確認しにくい」と割り切っておくのがいいでしょう。
もうひとつ大事なのが、PlayerPrefsは暗号化されずに保存されるという点。公式リファレンスにも「機密データを入れないように」と書かれています。レジストリやplistを開けば誰でも値を書き換えられるので、ハイスコアやゲーム内通貨をそのまま入れると改造は簡単です。
保存場所をスクリプトで確認する方法
表を見ながら手で探すより、Unity自身に場所を教えてもらうほうが確実です。会社名を変えていたり、Androidのパッケージ名を忘れていたりしても迷いません。
Debug.Logでパスを出す
いちばん簡単なのは、適当なゲームオブジェクトに次のスクリプトを付けて再生する方法です。Console に保存先のフルパスが表示されます。
using UnityEngine;
public class SavePathLogger : MonoBehaviour
{
void Start()
{
// ファイル保存の場所(JSONなどを書き出す先)
Debug.Log("保存フォルダ: " + Application.persistentDataPath);
// PlayerPrefs の場所を決める名前
Debug.Log("会社名: " + Application.companyName);
Debug.Log("製品名: " + Application.productName);
// Android / iOS で使うパッケージ名(バンドルID)
Debug.Log("パッケージ名: " + Application.identifier);
}
}
Androidの実機で動かす場合は、Development Build にチェックを入れてビルドすると、Logcat(Window > Analysis > Android Logcat。パッケージの追加が必要)でこのログを読めます。
エディタのメニューから保存フォルダを開く
毎回パスをコピーしてエクスプローラーに貼るのは手間なので、メニューに「保存フォルダを開く」を足しておくと楽になります。Assets の中に Editor という名前のフォルダを作り、そこに次のスクリプトを置いてください。Editor フォルダの外に置くと、ビルドのときにエラーになります。
using UnityEditor;
using UnityEngine;
public static class SaveFolderMenu
{
// メニューバーに「Tools > セーブ > 保存フォルダを開く」を追加する
[MenuItem("Tools/セーブ/保存フォルダを開く")]
static void OpenSaveFolder()
{
// Windows ならエクスプローラー、Mac なら Finder で開く
EditorUtility.RevealInFinder(Application.persistentDataPath);
}
}
EditorUtility.RevealInFinder は、Windowsではエクスプローラー、MacではFinderで指定した場所を表示するエディタ用の関数です。テスト中に「今どんなファイルができているか」をすぐ見られるので、セーブ機能を作っている間は手放せなくなると思います。
セーブデータを削除してリセットする方法
「最初から遊び直したい」「ビルド前にきれいにしたい」というときの消し方です。保存の種類ごとに手段が違います。
PlayerPrefsはメニューかDeleteAllで消す
エディタで遊んだ分のPlayerPrefsは、メニューの Edit > Clear All PlayerPrefs で全部消せます。Unity 6.3のエディタにもこの項目があることを確認しました。レジストリを触らずに済むので、まずはこちらを使うのが安全です。
ゲームの中に「データを消す」ボタンを置きたい場合は、スクリプトから消します。
// 1つのキーだけ消す
PlayerPrefs.DeleteKey("HighScore");
// このゲームの PlayerPrefs をすべて消す(元に戻せない)
PlayerPrefs.DeleteAll();
DeleteAll は公式リファレンスでも「注意して使うこと」と書かれている関数です。音量やキー設定まで一緒に消えるので、セーブだけを消したいなら DeleteKey でキーを指定したほうが、遊ぶ人にとって親切ですね。
ファイルのセーブはFile.Deleteで消す
JSONなどのファイルで保存している場合は、ファイルそのものを消します。手で消すなら、さきほどのメニューでフォルダを開いて削除するだけ。ゲームの中から消すなら次のように書きます。
using System.IO;
using UnityEngine;
public class SaveDeleter : MonoBehaviour
{
// 消したいセーブファイルの名前
[SerializeField] string fileName = "save01.json";
public void DeleteSave()
{
string path = Path.Combine(Application.persistentDataPath, fileName);
// ファイルがあるときだけ消す(ないのに消そうとしてもエラーにはならないが、ログで分かるようにする)
if (File.Exists(path))
{
File.Delete(path);
Debug.Log("セーブを削除しました: " + path);
}
else
{
Debug.Log("セーブファイルがありません: " + path);
}
}
}
パスを組み立てるときは、文字列を「/」でつなげるより Path.Combine を使うのがおすすめです。WindowsとMac・Androidで区切り文字の違いを気にしなくて済みます。
保存場所を変更したいときの考え方
「persistentDataPath 以外の場所に保存したい」という相談もよく見かけます。ただ、persistentDataPath そのものを書き換える設定はありません。変えたいときは、目的に合わせて次のどれかを選ぶことになります。
いちばん手軽なのは、persistentDataPath の中にサブフォルダを作って整理する方法。「Saves」フォルダを作ってスロットごとのファイルを入れる、といった形なら、どの機種でも書き込める場所のまま見通しがよくなります。
string folder = Path.Combine(Application.persistentDataPath, "Saves");
// フォルダがなければ作る(すでにあれば何もしない)
Directory.CreateDirectory(folder);
string path = Path.Combine(folder, "slot1.json");
フォルダ名そのものを変えたいなら、Edit > Project Settings > Player の Company Name と Product Name を変えます。DefaultCompany のまま配布するのは見た目もよくないので、ビルド前に自分の名前やサークル名にしておくといいですね。
ここで気をつけたいのは、名前を変えると保存先も変わるという点です。配布後のアップデートで Company Name や Product Name を変えると、遊んでいた人のセーブが読み込まれなくなります。どうしても変えるなら、起動時に古いフォルダを探して新しいフォルダへコピーする処理を入れておく必要があります。iOSとAndroidでも、バンドルID(パッケージ名)を変えると別のアプリ扱いになるので同じことが起きます。
Windows向けのゲームで「ドキュメント\My Games のようなフォルダに置きたい」という場合は、C#の System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments) でドキュメントフォルダのパスを取れます。ただしこれはPC向けの話で、AndroidやWebGLでは使えない前提で考えてください。逆に、ゲームのインストール先(exeのあるフォルダ)は Program Files に置かれると書き込めないことがあるので、セーブ先には向きません。
保存場所まで面倒を見たいならアセットという手もある
ここまで読んで「暗号化も、複数スロットも、機種ごとの違いも自分で書くのは大変そう」と感じた人もいると思います。実際、保存場所の扱いはセーブ機能の中でも地味に手間がかかる部分です。
Easy Save のようなセーブ用アセットは、保存先の指定や暗号化、PlayerPrefsとファイルの切り替えを設定で選べるようになっています。昨日公開した記事で、無料の2本を含むセーブアセット5本を価格と対応機能で比べたので、気になる人はこちらを見てみてください。
有料のアセットは、Asset Store のセールで値下げの対象になることがあるので、急ぎでなければセール時期を待つのも手です。毎月のセール情報はこちらでまとめています。
まとめ:セーブデータの場所は「どちらで保存したか」で決まる
Unityのセーブデータの場所は、ファイル保存なら Application.persistentDataPath、PlayerPrefsならOSごとの保存先(Windowsはレジストリ)、と覚えておけば迷いません。
・ファイル保存の場所は、WindowsならAppData\LocalLow\会社名\製品名。エディタとビルドで同じフォルダ
・WindowsのPlayerPrefsはレジストリで、エディタとビルドで別のキー
・Androidはアンインストールで消え、WebGLは置き場所のURLが変わると引き継がれない
・場所が分からなくなったら Debug.Log(Application.persistentDataPath) で確認
・配布後に Company Name / Product Name を変えると、セーブが読めなくなる
最初はAppDataが見つからないところで止まりがちですが、一度メニューから開けるようにしてしまえば、あとはずっと楽になります。セーブまわりの定番アセットはセーブ以外も含めて人気アセット40選に、お得に買える時期はAsset Storeのセール情報にまとめているので、あわせてどうぞ。




