FlatBuffersを使ってみた
Unityのセーブ機能をどうするかを悩んで、FlatBuffersを使うことにした話である。
Unityでセーブ機能を実装しようと思って、いろいろ調べた。一番手っ取り早いというか簡単なのは、Asset Storeにある有料Assetを使うのが手っ取り早そう。Easy Save 2というのが評判が良いのかな?
ただ、いずれはお世話になるかもしれないけれども、現状で有料Assetに手を出したくなかったので、なんとかならんかと継続して調べることに。
有料Assetのお世話にならないのなら、Player Prefsに保存するか、自力でファイルに保存するかっぽい。
ファイル保存方式だと、Json形式で保存するのが多いようだ。Jsonで保存するなら、チート対策に暗号化するなりして、プレーンな状態で保存するのは回避したいところ。
FlatBuffersが高速でいいらしいという記事を見つけて、ちょっと試してみた。ただ、なんとなくだけど、自分が思ってるようなセーブ機能には使いづらいかなと思った。保存したデータの一部を書き換えて更新する、というような使い方には向かない気がする。
気がするというのは、詳しく調べたわけではないというのと、実は更新処理ができるんだけど、単に私がそれに気付けていないというだけなのかもしれないから。
基本的にイミュータブルなデータ形式で、つまり読み取り専用なのである。スキーマを定義してコンパイルする際に、ミュータブルにするオプションがあって、それで読み書き可能にはできるものの、ファイル等に書き出す際には結局ゼロからデータを構築しないといけない(のだと思う)。
だからファイルに書きだしたデータを読み込んで、そのデータを元にゲームを進行させる。そして更新された部分だけを書き換えて、改めてセーブする、なんて使い方には向かない。ゲーム内で使うデータで、半永久的に固定されるデータ、例えばモンスターのデータとかアイテムのデータとかを取り扱うのには向いているんだろうなと思う。
などと書いておきながら、別に一部更新をする必要はないのかもしれないと思い始める。わざわざ更新用の処理を用意するより、ファイルに書き出す、ファイルから読むの2つの処理だけでやった方が余計なこと考えなくて楽かもしれない。
- https://google.github.io/flatbuffers/flatbuffers_guide_tutorial.html
- http://exiin.com/blog/flatbuffers-for-unity-sample-code/
- http://qiita.com/akerusoft/items/8c10f8a40fee722e6d1b