LitJsonを使うとゲームデータのためのクラスでインスタンス化された値を簡単にシアライズしてくれるので、データ保存をするのがとても楽になります。
また、ゲーム内のアイテムなどの膨大なデータもエクセルで作ってJSONに合わせた文字列で出力(マクロなど)されるようにすれば、それを簡単にデータ型に変換できるのでいろいろ便利です。
とりあえずは入手方法とインストール
こちらからダウンロード
http://lbv.github.io/litjson
DL後、解凍してsrcフォルダにあるLitJsonフォルダをそのままAssetsに入れると使えるようになります。
使いかた
データ型をシリアライズ(JSON化?文字列化?)するとき
Data data;// 例えばこんなクラスのデータをインスタンスする string json = LitJson.JsonMapper.ToJson( data );
シリアライズされた文字列をデータ型にするとき
string json; Data data = LitJson.JsonMapper.ToObject<Data>(json);
これだけです。List型やDictionary型もシリアライズされるのでとっても便利。
注意点
ここからは自分のためのメモです。
LitJsonを使うにあたっていろいろと注意点があります。
- まず、float型、long型は使えないということです。シリアライズする内容にこれらの型の変数があるとエラーになるそうです。
- クラスのフィールドはPublicにすること。Privateな変数はシリアライズされません。もちろんクラスのメソッドもシリアライズされません。
- Dictionary型をシリアライズさせる場合、Dictionary型のキーはおそらくstring型でないとエラーになります。キーをint型にするとエラーになりました。
- シアライズ化させるクラスにコンストラクタが設定されていると、文字列からデータ型に変換しようとするときにエラーがでます。使いかたが間違っているのかもしれませんが、調べてみても解決策が見つからなかったので、初期化するための別メソッドを実装して回避しています。
ちょっと気になること
この記事を書いている時点ではUnityの標準機能でJSONを扱えるようになっていました(JsonUtility)。
いろいろと検討したのですが、Dictionary型や配列などはシリアライズ化できなかったり、いろいろと柔軟性がない感じで使いにくかったので、引き続きLitJsonを使わせてもらおうと思います。