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

Amazonのほしいものリストを公開しています。仕事で欲しいもの、単なる趣味としてほしいもの、リフレッシュのために欲しいものなどを登録しています。 寄贈いただけると泣いて喜びます。大したお礼はできませんが、よりよい情報発信へのモチベーションに繋がりますので、ご検討いただければ幸いです。