その1:自作ゲームにプレイヤーレベル等のデータを保存する方法

ゲームを作る場合、すごくカジュアルなゲームでもなければ前回プレイしたときの

何かしらのデータを保存したい状況が出てくると思います

今回はデータの保存方法について見ていきたいと思います。

データの保存の仕方

データン保存の仕方は主に2パターンあり、主には以下の通り

1.サーバーを構築し通信してサーバーのデータベースに保存する
  • 利点
    • 保存したいデータの管理をサーバのデータベースで一元管理できる
    • データの改ざんが非常に難しい
    • ユーザのクリア状況などの調査ができる(ただし個人情報に当たる部分なるので注意が必要)
    • ユーザが端末を変えた場合の引き継ぎ機能が使える
    • 保存するデータで端末の容量を圧迫しない
  • 欠点
    • サーバ構築の時間と知識が必要
    • サーバの維持費がかかる
    • 通信な状況にない場合ゲームのプレイができない(ソーシャルゲームだと特に)

こちらは、昨今のソーシャルゲームにほとんど採用される形式ですね、

こちらの採用する場合、Unityだけでなくサーバーの知識の必要となってきますのでその分学習コスト及び開発期間が長くなりがちです。

2.素直に端末に保存しておく
  • 利点
    • とにかく簡単に実装できる
    • サーバの構築が不要なため維持費がかからない
    • 通信しなくてもセーブができるのでいつでもどこでもプレイできる
  • 欠点
    • ユーザのクリア状況などが確認できない
    • データの改ざんのリスクがある
    • 保存データで端末の容量を圧迫する
    • ユーザが端末を変えたときのデータの引き継ぎが難しい

こちらはカジュアルゲームに良く取られる形式ですね

とにかく手早く実装できるの上、Unityの知識のみで実装可能ですので手早くゲームを作る場合はこちらのほうがいいかもしれません。

この通りそれぞれ、欠点利点が存在するため、

自分のゲームにあった保存方法を選択していかなければなりません

ハイスコアの実装に当たり、今回は端末に保存する形式をとりました。

理由として

  • カジュアルゲームに分類されるため
  • スコア等の保存データにはそこまで気を配らなくてよいデータのため
  • SNSでスコアを共有できるため

とこのように特にサーバに保存しなくてもよい状況のため、今回は端末に保存する形式をとります

実装方法

端末に保存するだけであれば、Unityの機能にPlayerPrefsがあるため、

こちらを使用することで保存することができます

PlayerPrefsには整数、小数、文字列など基本的なデータをキーバリュー形式で簡単に保存することができます

PlayerPrefs.SetInt("Score", 20);

この場合、 「Score」というキーで「20」を保存しています。

逆にデータのとり方はこのようにすることで取ることができます

PlayerPrefs.GetInt("Score", 0);

このようにすることでプレイヤーのデータで例えると

  • レベル
  • スコア
  • 装備している武装

等様々なものが保存することができます

まとめ

今回は、スコアなどのデータの保存方法を記載しました

PlayerPrefsを用いることでPC、各種ブラウザ、各種端末にデータの保存ができ

非常に便利な機能です

ただし、 PlayerPrefsにはあくまで 整数、小数、文字列など基本的なデータしか保存ができないので

例えば、RPGのキャラクターでは

  • 名前
  • レベル
  • 今のHP
  • 所持アイテム
  • 現在の装備
  • 今いる座標
  • 覚えている技

このように複数のデータで1つのデータとなります

この場合、単純にPlayerPrefsに保存することができませんが一工夫することで保存することができます

次回はこのようのデータの保存について見ていきたいと思います


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
vuniformity誰でもない人
トレンドの行く末を見守っている
仮名を名乗るエンジニア

ゲーム開発は仕事であり趣味である
プログラムだけでなく多種多様なスキルを数多く持つ

ゲーム開発は
ソーシャルゲームを開発運用の経験アリ
ゲーム以外にも経験アリ
Webサービス保守開発等に携わる

ゲームプレイの主な戦場は
FGO
FEH
MTGA
マビノギ
ここでは主にunityroomで公開しているゲーム作り直しの軌跡を綴っていきます