使用C#序列化程序时,此问题是已知的。使用将数据转换为Json,
JsonUtility然后将其保存
PlayerPrefs。加载时,加载,
PlayerPrefs然后将json转换回class
JsonUtility。
要保存的示例类:
[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;}保存数据 :
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();}加载数据 :
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创建新的Object并返回它。它分配内存。
string jsonData = PlayerPrefs.GetString("MySettings");//Convert to Class. FromJson creates new Save instanceSave loadedData = JsonUtility.FromJson<Save>(jsonData);乙 。
JsonUtility.FromJsonOverwrite并 没有
创建新的对象。它与向类中添加更多数据类型无关。它只是覆盖其中传递的数据。这对于节省内存和减少GC很有用。唯一的一次,如果当你拥有领域,因为它会分配内存
array,
string和
List。
JsonUtility.FromJsonOverwrite使用Json进行恒定数据传输时,应使用示例。它将提高性能。
//Create Save instance **once** in the Start or Awake functionSave loadedData = null;void Start(){ //loadedData instance is created once loadedData = new Save();}void Load(){ string jsonData = PlayerPrefs.GetString("MySettings"); //Convert to Class but don't create new Save Object. Re-use loadedData and overwrite old data in it JsonUtility.FromJsonOverwrite(jsonData, loadedData); Debug.Log("High Score: " + loadedData.highScore);}


