ゲームを作る場合、すごくカジュアルなゲームでもなければ前回プレイしたときの
何かしらのデータを保存したい状況が出てくると思います
今回はデータの保存方法について見ていきたいと思います。
コンテンツ
データの保存の仕方
データン保存の仕方は主に2パターンあり、主には以下の通り
- 利点
- 保存したいデータの管理をサーバのデータベースで一元管理できる
- データの改ざんが非常に難しい
- ユーザのクリア状況などの調査ができる(ただし個人情報に当たる部分なるので注意が必要)
- ユーザが端末を変えた場合の引き継ぎ機能が使える
- 保存するデータで端末の容量を圧迫しない
- 欠点
- サーバ構築の時間と知識が必要
- サーバの維持費がかかる
- 通信な状況にない場合ゲームのプレイができない(ソーシャルゲームだと特に)
こちらは、昨今のソーシャルゲームにほとんど採用される形式ですね、
こちらの採用する場合、Unityだけでなくサーバーの知識の必要となってきますのでその分学習コスト及び開発期間が長くなりがちです。
- 利点
- とにかく簡単に実装できる
- サーバの構築が不要なため維持費がかからない
- 通信しなくてもセーブができるのでいつでもどこでもプレイできる
- 欠点
- ユーザのクリア状況などが確認できない
- データの改ざんのリスクがある
- 保存データで端末の容量を圧迫する
- ユーザが端末を変えたときのデータの引き継ぎが難しい
こちらはカジュアルゲームに良く取られる形式ですね
とにかく手早く実装できるの上、Unityの知識のみで実装可能ですので手早くゲームを作る場合はこちらのほうがいいかもしれません。
この通りそれぞれ、欠点利点が存在するため、
自分のゲームにあった保存方法を選択していかなければなりません
ハイスコアの実装に当たり、今回は端末に保存する形式をとりました。
理由として
- カジュアルゲームに分類されるため
- スコア等の保存データにはそこまで気を配らなくてよいデータのため
- SNSでスコアを共有できるため
とこのように特にサーバに保存しなくてもよい状況のため、今回は端末に保存する形式をとります
実装方法
端末に保存するだけであれば、Unityの機能にPlayerPrefsがあるため、
こちらを使用することで保存することができます
PlayerPrefsには整数、小数、文字列など基本的なデータをキーバリュー形式で簡単に保存することができます
PlayerPrefs.SetInt("Score", 20);
この場合、 「Score」というキーで「20」を保存しています。
逆にデータのとり方はこのようにすることで取ることができます
PlayerPrefs.GetInt("Score", 0);
このようにすることでプレイヤーのデータで例えると
- レベル
- スコア
- 装備している武装
等様々なものが保存することができます
まとめ
今回は、スコアなどのデータの保存方法を記載しました
PlayerPrefsを用いることでPC、各種ブラウザ、各種端末にデータの保存ができ
非常に便利な機能です
ただし、 PlayerPrefsにはあくまで 整数、小数、文字列など基本的なデータしか保存ができないので
例えば、RPGのキャラクターでは
- 名前
- レベル
- 今のHP
- 所持アイテム
- 現在の装備
- 今いる座標
- 覚えている技
このように複数のデータで1つのデータとなります
この場合、単純にPlayerPrefsに保存することができませんが一工夫することで保存することができます
次回はこのようのデータの保存について見ていきたいと思います