Unity

【Unity】セーブデータの使い方を徹底解説【保存・ロード・削除・暗号化】

この記事について

この記事は私がゲーム制作・学習等で学んだ知識を元にデータの保存・読み込み・削除の使い方をわかりやすく説明していきます。

この記事でわかること

  • 簡単なデータ保存方法(PlayerPrefs)
  • JSONファイルを使った複雑なデータ管理
  • バイナリファイルを使った暗号化データ保存
  • セーブ・ロード処理の最適化テクニック
  • おすすめデータ管理アセット

Unityのデータセーブ・ロードとは?

データセーブとは?

ゲーム内で発生した情報を、アプリ終了後も残すために 永続化(persistent)する処理

  • ステージクリア情報(どこまで進んだか)
  • 所持アイテムやコインの数
  • キャラクターのレベルや経験値
  • 音量や操作設定

データロードとは?

保存しておいたデータを、アプリ起動時などに 読み込み(復元)する処理

  • 前回終了時の続きから再開する
  • ユーザーが設定した BGM 音量や言語設定を反映する
  • セーブデータを選択してロードする

Unityのデータ保存の種類と特徴

簡単なデータはPlayerPrefs、複雑なデータはJSON / バイナリで管理!
※ PlayerPrefsは非推奨なので使用をおすすめはしません。

保存方法特徴使いどころ
PlayerPrefs文字列・数値の保存(簡易)一時データ
JSON(テキスト形式)構造化データを保存(可読性◎)キャラクター情報・ゲーム進行状況
バイナリ(Binary)圧縮して保存(セキュリティ◎)セーブデータ(暗号化)

基本的なセーブデータの保存場所

Application.persistentDataPathの活用

Application.persistentDataPathを使うと、OSごとに決められた保存場所にデータを保管可能になります。

OS保存先
WindowsC:\Users\ユーザー名\AppData\LocalLow\会社名\ゲーム名
Macbook~/Library/Application Support/会社名/ゲーム名
iOS/Android内部ストレージ/Android/data/パッケージ名/files

データをクラウドと同期する

Google PlayやiCloudを使って、クラウドに保存データを保存すると、マルチデバイス対応が可能です!

  • Google Play ゲームサービス(Android)
  • iCloud(iOS)
  • SQL

スクリプトでデータ操作

PlayerPrefsを使うと、ゲームの設定やハイスコアを手軽に保存・取得できます。
また、以下のサイトのようにシーンの切り替え時の変数の割り当てに便利です。

PlayerPrefsの使い方

PlayerPrefsはUnity が提供する 簡易的な永続データ保存機能 です。
データは端末(PCやスマホ)のローカルに保存され、アプリを終了しても保持されます。

保存できるデータ型は以下の3種類です。

  • int(整数)
  • float(小数)
  • string(文字列)

PlayerPrefsについては以下の記事を参考にしてください。

JsonUtilityの使い方

JsonUtilityは Unityが提供するJSONシリアライズ機能 です。
クラスや構造体を JSON 文字列に変換(保存)、または JSON 文字列をクラスに変換(読み込み)できます。

※JsonUtilityについては以下の記事を参考にしてください。

Binary(バイナリ)の使い方

バイナリ保存とはデータを 0と1のバイト列として直接ファイルに書き込む方法 です。
JSONのように人間が読めるテキスト形式ではなく、メモ帳で開くと文字化けして内容が確認できません。
そのため改ざんされにくく効率的であり、ゲームのセーブデータや内部的に扱う設定値などに利用されます。

※Binary(バイナリ)については以下の記事を参考にしてください。

おすすめデータ管理アセット

これまでの保存方法ではGameObjectやTransformといった型の保存ができないものであるが、このアセットを使用することで保存が可能になる。
例えば、データを保存して再度ゲームを開くときに各オブジェクトのTransformを保存しておくことで保存時の状態がすぐに復元可能になる。

私が個人開発をやっていて、初めて購入した有料アセットであり、私自身データ管理はゲームの唯一の肝と考えていたため、ミスをなくすためにもこのアセットを使用しています。

まとめ

  • Application.persistentDataPathを活用して、OSごとの保存場所を統一!
  • 設定やスコアの保存にはPlayerPrefs便利!
  • JSONが使えば、ゲームデータを構造化して保存できる!
  • バイナリを使えば、セーブデータを圧縮&改ざん防止!