[GameDev]データ保存絡みのあれやこれや

忘れないようにメモ。手を動かさずに頭でっかちになってる感ある。
よもや、ここにきてとほほ名誉教授のお世話になろうとは…。

■LocalStrage

  • 保存領域は1ドメインで最大5Mほど。
  • Cookieと同様に、情報はクライアントサイドに保存される。
  • ので、当然ながら改ざんの可能性がある。
  • ブラウザのインスペクタあたりから覗ける

■Session

  • 保存領域は…よくわからん。間借りサーバならあんまりガッツリ使い込まないほうがよさげか。
  • 情報はサーバサイドに保存される。閲覧改変不可。
  • 情報の更新にはページ遷移が必要。現状のように、空のインラインフレームに遷移させて保存…とかもできなくはない。

■IndexedDB

  • UnityのPlayerPrefs(セーブデータ的なモノ)のWebGLでの保存先はココ。
  • まだ新しめの技術らしい?
  • PlayerPrefsは、大容量だったり複雑なデータ構造をもたせにくそう。

なんとなくやりたい要件は

マスタデータはUnity側、Web側両方から参照できるように

たとえば敵データは、バトル中(Unity側)でも図鑑(Web側)でも使うよ…的な感じ。

Unity側で変更したセーブデータは、Web側でもすぐ反映されるように

手に入れたアイテムはすぐメニュー画面から確認できる…的な。

セーブデータの保存は、(操作可能状態での)任意、もしくはイベント終了後に行われるように

1.0からあったフラグ不整合問題の抜本的解決策を講じる。なおかつ、ユーザに「セーブ」というアクションをさせることなく、スムーズに続きを遊んでもらえるようにする。

セーブデータは暗号化されるように

ある程度は仕方ないとはいえ、極力生データは見せたくないところ。

といった感じ。


そんなわけで、だいたい以下のような感じでいけばよいんではないかと。

マスタデータ

サーバ上に置く方向で。xls放り込んでもいいし、csvなりにエクスポートできるようにしておくもよし。メンテナンス性を重視するなら前者か。

セーブデータの保存

Unity側でセーブデータオブジェクトを作る。Webへの反映と保存は下記。

1.  イベント終了のタイミングで、Web側に暗号化済のセーブデータを渡す。

2. もらったWeb側は、データをLocalStrageに保存すると同時に、整形用phpにデータをPOST送信。

3. 整形用phpであれやこれやする。

4. 2.のコールバックとして3.の結果を受け取り、Web側に流し込む。


書くと頭の中が整理されるのはいいけど、普段と違う体力を使うのである…。

以下、まとめきれない部分

 

■phpでやらなアカンこと

・画像の切り出し。Unity側でスプライトとして使うので、アイコンセット画像をサーバに置く。元画像を直リンク禁止にしつつ、目当ての画像を取り出したい。

・セーブデータからhtmlの整形。かつ、xlsならデータの取り出し。シートとキーで列取り出しができればあとはいいように使えるかね。

セーブデータ… item_001 : true

マスタデータ(シートitem)… item_001, アイテム名, 画像index, 説明テキスト,  クリック時イベント

とかいうデータがあれば、

<a onclick=クリック時イベント title=説明テキスト><img src=画像取り出しphp?index=画像index></a>

とかいうhtmlを吐いてやれば良さげ。ちゃんとBootstrapなりAngulerJSなりのクラス名をつけてね。

・Unity側で暗号化したデータの復号化。ルール決めてたらなんとかなるか。

・実績監視。もここでやったほうがええかね。マスタ覗いてセーブ精査してhtmlに吐ける唯一と思われる部分ゆえ、ここが都合いい感。

■Unity – セーブデータオブジェクト

setInt/setString/setBool(key, value) … データの格納(セーブ反映はまだ)

getInt/getString/getBool(key) … データの参照

save() … データのセーブ(Webにデータを投げる。セーブ反映される)

load(data) … データのロード(データを取ってくる。引数は暗号化済データ)

init() … データの初期化(この辺はphp側でやるか?)