この記事について
この記事は私がゲーム制作・学習等で学んだ知識を元にデータの保存・読み込み・削除の使い方をわかりやすく説明していきます。
この記事でわかること
- 簡単なデータ保存方法(PlayerPrefs)
- JSONファイルを使った複雑なデータ管理
- バイナリファイルを使った暗号化データ保存
- セーブ・ロード処理の最適化テクニック
- おすすめデータ管理アセット
Unityのデータセーブ・ロードとは?
データセーブとは?
ゲーム内で発生した情報を、アプリ終了後も残すために 永続化(persistent)する処理。
- ステージクリア情報(どこまで進んだか)
- 所持アイテムやコインの数
- キャラクターのレベルや経験値
- 音量や操作設定
データロードとは?
保存しておいたデータを、アプリ起動時などに 読み込み(復元)する処理。
- 前回終了時の続きから再開する
- ユーザーが設定した BGM 音量や言語設定を反映する
- セーブデータを選択してロードする
Unityのデータ保存の種類と特徴
➡ 簡単なデータはPlayerPrefs、複雑なデータはJSON / バイナリで管理!
※ PlayerPrefsは非推奨なので使用をおすすめはしません。
保存方法 | 特徴 | 使いどころ |
---|---|---|
PlayerPrefs | 文字列・数値の保存(簡易) | 一時データ |
JSON(テキスト形式) | 構造化データを保存(可読性◎) | キャラクター情報・ゲーム進行状況 |
バイナリ(Binary) | 圧縮して保存(セキュリティ◎) | セーブデータ(暗号化) |
基本的なセーブデータの保存場所
Application.persistentDataPathの活用
Application.persistentDataPathを使うと、OSごとに決められた保存場所にデータを保管可能になります。
OS | 保存先 |
---|---|
Windows | C:\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が使えば、ゲームデータを構造化して保存できる!
- バイナリを使えば、セーブデータを圧縮&改ざん防止!