バナナラボ

Vtuber美作ワニのブログです

【実装のヒント】クラスをJsonにする【Unity】

f:id:bananalabwani:20211005234102p:plain

バナナラボのワニです。 手軽にセーブデータを作りたい、と考えた時にクラスまるごとJsonにしてしまうのが楽です。 今回その方法を紹介しようと思います。

以下のクラスをJsonにしようと思います。

[System.Serializable]
public class Data
{

    public int level = 5;
    [SerializeField] protected string name = "御坂美琴";
    [SerializeField] private bool evolution = false;
    private int age = 14;
    public Skill skill;
    public Friend friend;
    public Skills skills;
}

[System.Serializable]
public class Skill
{
    public int id;
}

public class Friend
{
    public int id;
}

上記のようなクラスを

JsonUtility.ToJson<Data>(new Data());

Jsonの文字列に変換することができます。 publicSerializeField で明示された変数についてはJsonとして変換することができます。

ただし、[System.Serializable]を属性として指定したクラスのみ有効です。 上記の場合、FriendJsonに変換することができません。

またその他、Listは可能ですがDictionaryについては変換することができません。*1

継承の場合

継承元も無事Jsonで表現されます、その場合、継承元はSerializeFieldはなくても構いません。

ジェネリック型は可能か

ジェネリック型も問題なく表現することができます。これを応用することで複数のマスタを表現したJsonデータのクラスを設計することも可能です。

最後に

Jsonデータは文字列をみるとどういうデータかわかってしまうという問題点はありますが、手軽さもありますし、改ざん対策も容易*2なので是非利用していきたい。

宣伝

YouTubeでゲーム実況・ゲーム開発の動画投稿および配信をやっています! もしご興味があればチャンネル登録・高評価よろしくおねがいします!

www.youtube.com

*1:特殊な手順を踏めば実装可能

*2:一方で改ざんを突破する対策もできてしまうが