> 백엔드 개발 > C++ > JSON을 사용하여 Unity의 저장/로드 시스템에서 직렬화 변경 사항을 어떻게 처리할 수 있나요?

JSON을 사용하여 Unity의 저장/로드 시스템에서 직렬화 변경 사항을 어떻게 처리할 수 있나요?

DDD
풀어 주다: 2025-01-04 22:50:41
원래의
709명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿