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