Unityでゲームを作っていると、必ずといっていいほど直面するのが「セーブ機能、どう実装しよう」という悩みですよね。PlayerPrefsで頑張ってみたものの、複雑なデータがうまく保存できなくて手が止まった、という経験がある方も多いのではないでしょうか。
そんなときによく名前が挙がるのが、有料アセットの「Easy Save 3」です。この記事では、Easy Save 3がどんなアセットなのかという基本から、実際にインストールしてセーブ・ロードを動かすところまで、順番に見ていきます。
Easy Save 3とは?PlayerPrefsとの違い
Unity標準の機能でデータを保存する方法として、まず思い浮かぶのがPlayerPrefsではないでしょうか。数値や文字列といったシンプルなデータであれば、PlayerPrefsだけでも十分に対応できます。
ただし、リストやクラスのような複雑なデータ構造を保存したい場合は、JSON形式に変換してから文字列として保存するなど、少し手間のかかる工夫が必要になります。さらに、保存したデータが誰でも簡単に書き換えられてしまうという、セキュリティ面の弱さも気になるポイントです。
こうした課題を解決する選択肢として使われているのが、「Easy Save 3(ES3)」というUnity用の有料アセットです。PlayerPrefsと近い感覚で扱えるうえに、暗号化やさまざまなデータ形式への対応など、標準機能では手間がかかる部分をカバーしてくれるのが特徴です。
PlayerPrefsとEasy Save 3の違いをまとめると、次のようになります。
| PlayerPrefs | Easy Save 3 | |
|---|---|---|
| 対応データ型 | 数値・文字列など基本型が中心 | 配列、List、Dictionary、Vector3、GameObjectなど幅広く対応 |
| 暗号化対応 | 標準では非対応 | AES暗号化に対応 |
| 保存先の種類 | ローカルのみ | ローカルファイル、クラウド保存など複数選択可能 |
| 料金 | 無料(Unity標準機能) | 有料アセット |
こうして並べてみると、Easy Save 3は「PlayerPrefsでは手が届かない部分を補ってくれるアセット」という位置づけがイメージしやすいかと思います。導入を検討している方は、以下から詳細を確認してみてください。
なお、PlayerPrefsやJSON、ScriptableObjectといった他の保存方法も含めてじっくり比較したい場合は、こちらの記事もあわせて参考にしてみてください。
より詳しい比較を知りたい方は、こちらの記事もあわせてご覧ください。
Easy Save 3の導入・インストール手順
ここからは、実際にEasy Save 3をプロジェクトに導入する手順を見ていきます。作業自体はシンプルなので、順番通りに進めれば迷うことはないはずです。
アセットの購入とプロジェクトへのインポート
まずはUnity Asset StoreからEasy Save 3を購入し、プロジェクトへ取り込むところから始めます。
- Unity Asset StoreでEasy Save 3を購入する
- Unityエディタを開き、Package Manager(またはAsset Storeウィンドウ)からEasy Save 3を選択する
- 「Import」ボタンを押し、表示されたファイル一覧を確認してインポートを実行する
インポートには少し時間がかかることがありますが、プロジェクトのファイル数によって前後するだけなので、気長に待って問題ありません。
Toolsメニューに追加されたことを確認する
インポートが完了したら、正しく導入できたかを確認しましょう。
- Unityエディタ上部のメニューバーから「Tools」をクリックする
- メニューの中に「Easy Save 3」の項目が表示されていることを確認する
この「Easy Save 3」の項目が表示されていれば、インストールは無事に完了しています。

次は、この「Tools」メニューから開ける設定画面を使って、暗号化の設定を行っていきます。
暗号化(AES)の設定方法と注意点
Easy Save 3を使う大きなメリットのひとつが、セーブデータを暗号化できることです。ここでは、暗号化を有効にする手順と、設定を変更するときに気をつけたいポイントを紹介します。
Runtime Settingsで暗号化を有効にする手順
暗号化の設定は、Easy Save 3専用の設定画面からまとめて行えます。
- Unityエディタ上部のメニューから「Tools」→「Easy Save 3」を選択し、設定ウィンドウを開く
- 「Runtime Settings」(または「Settings」)タブを開く
- 「Encryption Type」の項目を「AES」に変更する
- 「Password」(Encryption Password)欄に、任意のパスワード文字列を入力する
ここまでの設定で、以降にセーブされるデータは自動的に暗号化された状態で保存されるようになります。特別なコードを書き足す必要がないのは、うれしいポイントですね。
設定変更後に古いセーブデータが読み込めなくなるケースと対処法
暗号化まわりで一番つまずきやすいのが、途中から暗号化を有効にしたり、パスワードを変更したりすると、それ以前に保存していたデータが読み込めなくなるという点です。
これはデータが壊れているわけではなく、暗号化の設定が変わったことで、正しく復号できなくなっているために起こります。仕組みを知らずに遭遇すると「バグかな?」と不安になってしまうかもしれませんが、原因が分かれば対処はシンプルです。
暗号化の設定やパスワードを変更する場合は、変更前に保存されていた古いセーブデータを削除してから起動してください。削除しないままロードしようとすると、データ破損とみなされエラーになることがあります。
開発中に暗号化のオン・オフやパスワードを試行錯誤する場面は意外と多いので、「設定を変えたら古いデータは消す」という流れを覚えておくと安心です。セーブデータの安全な管理方法について、さらに詳しく知りたい方はこちらの記事も参考になります。
セーブファイルの保存場所を確認する方法
設定が終わったところで、実際にデータがどこに保存されているのか気になる方もいるかもしれません。ここでは、セーブファイルの保存場所を確認する手順を紹介します。
- Unityエディタ上部のメニューから「Tools」→「Easy Save 3」→「Tools」を選択する
- 表示されたメニューの中から「Open Persistent Data Path」をクリックする
- エクスプローラー(またはFinder)が開き、プロジェクトのセーブフォルダが表示される
フォルダの中にある「SaveFile.es3」などのファイルは、メモ帳やテキストエディタで開くことができます。暗号化していない状態であれば、中身がJSON形式のテキストとして表示されるので、実際にどんなデータが保存されているのか目で確認できます。
なお、この「Tools」メニューからは、不要になったセーブデータやPlayerPrefsをまとめて削除することも可能です。開発中に何度もテストを繰り返す場合は、この機能を使ってデータをリセットしながら進めると作業がスムーズになります。
基本のセーブ・ロード実装方法
ここからは、実際にC#スクリプトを書いてセーブとロードを動かしていきます。Easy Save 3の基本的な書き方さえ覚えてしまえば、あとは応用がきくので、ひとつずつ確認していきましょう。
なお、Auto Saveを有効にした場合、シーン上に「Easy Save 3 Manager」というオブジェクトが自動的に作られますが、これは動作に必要なオブジェクトなので削除しないよう注意してください。
ES3.Saveでデータを保存する
データを保存するときは、ES3.Saveというメソッドを使います。第一引数に保存先の名前(キー)、第二引数に実際に保存したい値を指定するだけのシンプルな書き方です。
// int型のデータを"Score"というキーで保存
ES3.Save<int>("Score", 12345);
// string型のデータを"PlayerName"というキーで保存
ES3.Save<string>("PlayerName", "テストプレイヤー");
同じキーで別のデータを保存すると、内容は上書きされます。異なる型のデータを同じキーで上書きしてもエラーにはならず、そのまま置き換わってしまうので、キー名の使い回しには注意が必要です。
ES3.Loadでデータを読み込む
保存したデータを読み込むときは、ES3.Loadを使います。保存したときと同じキーを引数に指定します。
// "Score"キーからint型のデータを読み込む
int score = ES3.Load<int>("Score");
Transformのように、すでに存在するオブジェクトへ直接値を反映させたい場合は、ES3.LoadIntoというメソッドも用意されています。
// オブジェクトの値を直接復元する
ES3.LoadInto<Transform>("TransformKey", transform);
未保存キーへのアクセスを防ぐ(KeyExists/defaultValueの使い分け)
初めてEasy Save 3を触ったときにつまずきやすいのが、まだ一度も保存していないキーをロードしようとして起きるエラーです。KeyNotFoundExceptionというエラーが発生し、ゲームが止まってしまいます。
これを防ぐ方法は大きく2つあります。ひとつは、事前にキーが存在するかどうかを確認する方法です。
if (ES3.KeyExists("Score")) {
int score = ES3.Load<int>("Score");
}
もうひとつは、ロード時にdefaultValueを指定しておき、キーが存在しない場合はその値を代わりに受け取る方法です。
// 未保存の場合は"DefaultName"を取得する
string name = ES3.Load<string>("PlayerName", defaultValue: "DefaultName");
どちらの方法でも構いませんが、ゲームを初めて起動したときにデータが存在しない状態は必ず発生するので、どちらか一方は必ず組み込んでおくと安心です。
実際にハイスコアの保存・リセットを例にした実装例を見たい方は、こちらの記事も参考にしてみてください。
データの削除とファイル分割の方法
セーブ・ロードの基本ができるようになったら、次に押さえておきたいのが「データの削除」と「ファイルを分けて保存する方法」です。プロジェクトが大きくなってくると、この2つの知識が役に立つ場面が増えてきます。
キー・ファイルの削除方法
不要になったデータを消したいときは、以下のメソッドを使います。
- キーだけを削除する場合:
ES3.DeleteKey("キー名"); - ファイルごと削除する場合:
ES3.DeleteFile("ファイル名.es3"); - ディレクトリごと削除する場合:
ES3.DeleteDirectory("ディレクトリ名");
削除対象がもともと存在しない場合でも、エラーにはなりません。そのため、存在確認をせずに呼び出しても安全に使えます。
ファイルを分けて保存する方法
Easy Save 3では、セーブ・ロードメソッドの引数にファイル名を追加するだけで、データを別ファイルに分けて保存できます。
// myFile1.es3に保存
ES3.Save<int>("IntKey", 1, "myFile1.es3");
// myDirectory/myFile2.es3に保存
ES3.Save<int>("IntKey", 2, "myDirectory/myFile2.es3");
// myFile1.es3から読み込む
int value1 = ES3.Load<int>("IntKey", "myFile1.es3");
同じキー名でも、保存先のファイルが違えば別のデータとして扱われるのがポイントです。たとえば「プレイヤーごとのセーブデータ」と「ゲーム全体の設定データ」を分けて管理したい場合など、用途に応じてファイルを分けておくと、後から見返したときにも整理しやすくなります。
ファイルを分ける設計をさらに発展させて、アップデートしてもデータが壊れにくい保存の仕組みを作りたい場合は、こちらの記事も参考になります。
PlayerPrefsとどちらを選ぶべきか
ここまで一通りの使い方を見てきましたが、「結局、自分のプロジェクトにはPlayerPrefsとEasy Save 3のどちらが合っているんだろう」と迷う方もいるかもしれません。最後に、選ぶときの判断基準を整理しておきます。
以下のチェックリストのうち、当てはまる項目が多いほど、Easy Save 3が向いている可能性が高くなります。
- ✅ 保存したいデータが、リストやDictionary、自作クラスなど複雑な構造になっている
- ✅ オンラインランキングなど、セーブデータの改ざん(チート)を防ぎたい場面がある
- ✅ 複数のセーブファイルやセーブスロットを用意したい
- ✅ アセットの購入費用をかけてでも、実装の手間を減らしたい
逆に、保存したいデータが数値や文字列といったシンプルなものだけで、セキュリティもそこまで気にしなくてよい場合は、無理にEasy Save 3を導入しなくても、PlayerPrefsだけで十分こと足りることが多いです。
「今のプロジェクトにどれくらい複雑なデータがあるか」「チート対策がどこまで必要か」の2点を軸に考えると、判断しやすくなります。どちらか一方でも当てはまりが強いようであれば、Easy Save 3の導入を検討してみる価値はありそうです。
複数のセーブデータを切り替えられるセーブスロット機能まで作りたい場合は、こちらの記事でPlayerPrefsやJSON、Easy Save 3を使った実装方法を比較しているので、あわせて読んでみてください。
よくある誤解・注意点
最後に、Easy Save 3を使い始めたときに混同しやすいポイントを、まとめて整理しておきます。個別に知っておくと、実装中に「あれ、これどっちだっけ」と迷う場面が減るはずです。
Easy Save 2との違い(互換性がない点)
Easy Save 3は、前のバージョンであるEasy Save 2とは別物として作られています。APIの書き方や対応している機能も異なるため、Easy Save 2で書いたコードをそのままEasy Save 3で使うことはできません。もし過去の情報を参考にする際は、それがどちらのバージョン向けの内容か確認しておくと安心です。
キーとファイルの違い(混同しやすいポイント)
「キー」と「ファイル」は、名前が似ているようで役割が異なります。キーはひとつのデータ項目を呼び出すための名前で、ファイルは複数のキーをまとめて保存しておく入れ物のようなものです。
たとえば「Score」というキーは、保存先のファイルを指定しなければ標準のファイルに保存されますが、先ほど紹介したようにファイル名を指定すれば、別のファイルに同じキー名で保存することもできます。この2つの違いを意識しておくと、データの整理がぐっとしやすくなります。
Auto Saveと手動セーブ(ES3.Save)の違い
Easy Save 3には、スクリプトを書かなくても自動でセーブ・ロードしてくれる「Auto Save」という機能もあります。これは、シーン上のオブジェクトの状態をそのまま保存できる便利な仕組みですが、保存するタイミングや対象を細かくコントロールしたい場合には、今回紹介したES3.Saveを使った手動での実装のほうが向いています。

どちらが優れているというより、用途によって使い分けるものだと捉えておくとよいでしょう。Auto Saveの具体的な設定方法については、別の記事で詳しく扱う予定です。
よくある質問
-
QEasy Save 3はスマートフォン(iOS/Android)でも同じ書き方で使えますか?
-
Aはい、Easy Save 3はiOSやAndroidを含む主要なプラットフォームに対応しており、基本的なコードの書き方はPC向けと変わりません。ただし、実機によって保存先のパスや動作環境が異なる場合があるため、実際に端末でビルドしてセーブ・ロードが正しく動くかは一度確認しておくと安心です。特にストア審査に出す前には、実機でのテストを済ませておくことをおすすめします。
-
Qセーブ処理を頻繁に呼び出すとパフォーマンスに影響しますか?
-
A毎フレームのように高頻度で呼び出すと、処理落ちの原因になることがあります。目安としては、アイテム取得やステージクリアなど「意味のあるイベントが起きたタイミング」だけでセーブを呼び出す設計にすると、パフォーマンスへの影響を抑えながら必要なデータをきちんと残せます。常時ではなく節目ごとに保存する、という考え方で組み立てるとよいでしょう。
-
Q暗号化しない場合、どの程度のリスクがありますか?
-
A暗号化していないセーブデータは、テキストエディタなどで中身を開くだけで内容が読み取れてしまい、数値の書き換えによるチート行為がしやすい状態になります。オンラインランキングやアイテム課金と連動する数値を扱う場合は暗号化を検討する価値がありますが、オフライン専用でチート耐性をそこまで重視しないゲームであれば、暗号化なしでも大きな問題にならないケースもあります。ゲームの性質に合わせて判断するとよいでしょう。












※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。