忘れないようにメモ。手を動かさずに頭でっかちになってる感ある。
よもや、ここにきてとほほ名誉教授のお世話になろうとは…。
■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側でやるか?)
