Help us understand the problem. What is going on with this article?

UnityでセーブデータをSerialize保存する 〜現状〜

Unityでセーブデータを暗号化してSerialize保存
Unityでセーブデータを暗号化してSerialize保存 ~その2~
Unityでセーブデータを暗号化してSerialize保存 ~その3~

UnityでのSerialize保存の現状をまとめとく。

オススメ

ZeroFormatter > ScriptableObject > JsonUtility > Easy Save > FlatBuffers > MessagePack > その他

正確に全て比較したわけじゃないので実際なんとも言えないのだけど、個人的なオススメ順。

MessagePack

C#のMessagePackライブラリはいろいろあるけど、表題のものが一番更新頻度が高い。実際に使ったことがあるのだけど、自分が試した時は動作が不安定だった印象(まだIL2CPPにも対応されてなかった)。ただ自分が試した時から1年くらい経過してIL2CPPに対応されたりバージョンアップを繰り返したりで今なら安定性向上してるかも。
バイナリなんで速いは速いと思うんだけど、ちょっと以前の経験から敬遠気味。

FlatBuffers

大手でも採用されてるバイナリシリアライザー。まだ試したことはないのだけど、なかなかすごそう。ただ若干導入が億劫なイメージ(UniRxの人もアプリケーションの層で実用に使うのは無理って言ってるし・・・)。

Easy Save

有料Asset。Jsonもバイナリも暗号化も可能で、セーブ可能なデータ型も豊富。評価高いしドキュメントも丁寧だし、めっちゃ優秀なAssetだと思う。

ScriptableObject/JsonUtility

Unity管理、ネイティブで処理されるのでかなり速い。Unityとの相性抜群(作業効率UP)。ScriptableObjectだったらUnity上でデータ操作出来るし、AssetBundle化もしやすいし、なんだかんだUnityの恩恵を得られるのがでかい。

ZeroFormatter

UniRxの作者の人が作った無限大高速シリアライザー。詳しくはこちらを確認してもらいたいが、概念はFlatBuffersと同じ思想で、Unityで使いやすいように作られてるよう。まだ試してないが、これはUnityのシリアライザーの歴史を変えるかもしれない・・・。

最後に

もちろん用途にもよるとは思う。Jsonだったら中身がテキストなんでデバッグしやすいとか、バイナリだったらパッと見わかり難いから暗号化しなくてもいいとか。

自分の場合は以下。

ユーザデータ -> サーバ管理
ゲームデータ -> ScriptableObject
それ以外   -> PlayerPrefs

不正はサーバで防ぐものなのでユーザデータは全てサーバ。
見られても構わないものはほとんどScriptableObject。
それ以外のちょっとしたセーブデータはPlayerPrefs。

ScriptableObjectが一番使いやすい。

  • 速い
  • Unity上でデータ操作出来る
  • 外部データ化しやすい(AssetBundle)
  • 暗号化気にしなくていい(パッと見わかり難い)
  • Unity管理(お任せ)

 
ZeroFormatter、今度さっそく試しみよう(´・ω・`)

tempura
フリーランスのゲームプログラマー
https://tempura-kingdom.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away