ホームページ > バックエンド開発 > C++ > JSON を使用して Unity の保存/読み込みシステムでシリアル化の変更を処理するにはどうすればよいですか?

JSON を使用して Unity の保存/読み込みシステムでシリアル化の変更を処理するにはどうすればよいですか?

DDD
リリース: 2025-01-04 22:50:41
オリジナル
677 人が閲覧しました

How Can I Handle Serialization Changes in Unity's Save/Load System Using JSON?

Unity の保存/読み込みシステムによるシリアル化の変更の処理

Unity のシリアル化は便利であるにもかかわらず、シリアル化されたクラスに変数を追加するときに課題が生じます。この問題は、新しい変数が存在しないため、シリアル化されたファイルの古いバージョンを読み込むときに逆シリアル化エラーとして現れます。

中間形式としての JSON の利用

この問題に対処するには、中間データ形式として JSON (JavaScript Object Notation) を利用できます。保存する前にシリアル化されたクラスを JSON に変換し、読み込み時にオブジェクトに戻すことで、変数の欠落によって引き起こされる逆シリアル化エラーを回避できます。

クラス構造の例

[Serializable]
public class Save
{
    public List<int> ID = new List<int>();
    public List<int> Amounts = new List<int>();
    public int extra = 0;
    public float highScore = 0;
}
ログイン後にコピー

でデータを保存するJSON

void Save()
{
    Save saveData = new Save();
    saveData.extra = 99;
    saveData.highScore = 40;

    // Convert to JSON
    string jsonData = JsonUtility.ToJson(saveData);

    // Save JSON string
    PlayerPrefs.SetString("MySettings", jsonData);
    PlayerPrefs.Save();
}
ログイン後にコピー

JSON によるデータのロード

void Load()
{
    // Load saved JSON
    string jsonData = PlayerPrefs.GetString("MySettings");

    // Convert to Class
    Save loadedData = JsonUtility.FromJson<Save>(jsonData);

    // Display saved data
    Debug.Log("Extra: " + loadedData.extra);
    Debug.Log("High Score: " + loadedData.highScore);

    for (int i = 0; i < loadedData.ID.Count; i++)
    {
        Debug.Log("ID: " + loadedData.ID[i]);
    }
    for (int i = 0; i < loadedData.Amounts.Count; i++)
    {
        Debug.Log("Amounts: " + loadedData.Amounts[i]);
    }
}
ログイン後にコピー

JsonUtility.FromJson との違いJsonUtility.FromJsonOverwrite

  • JsonUtility.FromJson: JSON から新しいオブジェクトを作成し、メモリを割り当てて返します。
  • JsonUtility.FromJsonOverwrite : 渡されたオブジェクトを JSON データで上書きし、何も作成しません新しいオブジェクト。これにより、JSON で頻繁にデータ転送を実行する場合にメモリを節約し、GC の使用量を減らすことができます。

以上がJSON を使用して Unity の保存/読み込みシステムでシリアル化の変更を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート