Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menyimpan dan memuatkan data permainan dengan kuat di Unity3D menggunakan JSON dan PlayerPrefs?
Kaedah BinaryFormatter mungkin menghadapi masalah dalam beberapa kes (terutamanya pada peranti iOS). Ia bergantung kepada pemadanan kelas semasa deepertine, jadi ia boleh menyebabkan kehilangan data selepas mengemaskini atau pembentukan semula. Di samping itu, ia perlu menambah pembolehubah persekitaran kepada iOS untuk mencegah masalah.
Untuk menyelesaikan sekatan ini dan menyediakan penyelesaian yang lebih kuat, disarankan untuk menggunakan PlayerPrefs dan JSON untuk menyelamatkan status permainan. PlayerPrefs menyediakan mekanisme mudah yang boleh menggunakan sedikit data sebagai nilai utama untuk penyimpanan, dan JSON (JavaScript Object Notation) menyediakan format berstruktur yang dapat dengan mudah mengubahnya ke objek dan menukarnya dari objek.
Kaedah ini boleh dipertingkatkan lagi dengan menukar rentetan JSON ke dalam array byte dan menggunakan
dan untuk membaca dan menulis data. File.WriteAllBytes
File.ReadAllBytes
Berikut adalah demonstrasi umum teknologi ini
jenis penggunaan ini adalah seperti berikut: DataSaver
<code class="language-csharp">public class DataSaver { // 保存数据 public static void SaveData<T>(T dataToSave, string dataFileName) { string path = Path.Combine(Application.persistentDataPath, dataFileName + ".json"); // 使用 Application.persistentDataPath 保证数据持久性 string jsonData = JsonUtility.ToJson(dataToSave, true); byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonData); // 使用 UTF8 编码 Directory.CreateDirectory(Path.GetDirectoryName(path) ?? ""); // 创建目录,处理空路径 try { File.WriteAllBytes(path, jsonBytes); Debug.Log("数据已保存到: " + path); } catch (Exception e) { Debug.LogError("保存数据失败: " + path + "\n错误信息: " + e.Message); } } // 加载数据 public static T LoadData<T>(string dataFileName) { string path = Path.Combine(Application.persistentDataPath, dataFileName + ".json"); if (!File.Exists(path)) { Debug.Log("文件不存在: " + path); return default(T); } byte[] jsonBytes = null; try { jsonBytes = File.ReadAllBytes(path); Debug.Log("数据已加载自: " + path); } catch (Exception e) { Debug.LogError("加载数据失败: " + path + "\n错误信息: " + e.Message); return default(T); } string jsonData = Encoding.UTF8.GetString(jsonBytes); // 使用 UTF8 编码 return JsonUtility.FromJson<T>(jsonData); } }</code>Contoh ini meningkatkan pemprosesan ralat, menggunakan jenis yang lebih biasa
, dan menggunakan
untuk memastikan ketahanan data dan membetulkan masalah pengekodan. Ingat untuk menambah atribut<code class="language-csharp">// 要保存的示例类 [Serializable] public class PlayerInfo { public List<int> IDs = new List<int>(); public List<int> Amounts = new List<int>(); public int Life = 0; public float HighScore = 0; } // 保存数据 PlayerInfo saveData = new PlayerInfo(); saveData.Life = 99; saveData.HighScore = 40; DataSaver.SaveData(saveData, "playerData"); // 加载数据 PlayerInfo loadedData = DataSaver.LoadData<PlayerInfo>("playerData"); if (loadedData != null) { Debug.Log("生命值: " + loadedData.Life); Debug.Log("最高分: " + loadedData.HighScore); }</code>ke kelas anda.
Atas ialah kandungan terperinci Bagaimana untuk menyimpan dan memuatkan data permainan dengan kuat di Unity3D menggunakan JSON dan PlayerPrefs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!