Unityでのセーブ&ロード(ローカル保存)

ハイスコア記録等、Unityでアプリを終了させてもデータを永続的に保存しておきたい場合の話。
※今回はデータはサーバではなく端末ローカルに保持するものとする。
いくつかアプローチがあるっぽいので挙げておく。※2015年1月時点

1:PlayerPrefs保存(非推奨)
解説本とかググったら良く見かける手法。でもデータは平文で保存されてしまう。
DigitalTutorsのこのチュートリアル(※有料会員しか見れません)ではMD5でdecryptする手法がある。
とはいえ、PlayerPrefsは処理速度も遅いそうなので、保存項目の少ない超カジュアルゲーム以外はオススメではないと(下のビデオでUnityの中の人が言ってる)

2:シングルトンオブジェクト上でシリアライズしたdatデータとして保存
Unity公式サイト内のチュートリアル動画「PERSISTENCE – SAVING AND LOADING DATA」で解説されている手法。
解説では「WebPlayer以外の環境で動くよ」と言っているが、iOS実機だとBinaryFormatterまわりでエラーとなる。
解決法としてはBinaryFormatterを使っているソースのAwake部分に

Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER","yes");

の一行を書き加えることで解消する。
ビデオは2014年3月時点でUnity公式に掲載されているので、比較的新しく信頼できるアプローチかと思われる。

3:JSONやmsgpackを使う
上のBinaryFormatterまわりのエラーが気持ち悪いとつぶやいたところ教えてもらったアプローチ。

僕はmsgpackというのを知りませんでしたが、JSONのバイナリ版ということで、テラシュールウェアさんのブログではJSON操作よりもmsgpackの方が速いとのことで 、まずはmsgpackを候補として調べておこうかな。
※まだ調べてないけど結局シリアライズ処理すると思うのと、シングルトンオブジェクトで運用するのは同じなような気もするので、速度的には2と似た感じなのかなぁ。JSONなのでサーバにデータ送信する時は良さそうな気がする。

他に最新のベストプラクティスあれば知りたいところ。こういう時ひとり家作業だとフワーっと把握できないので寂しい。