Méthode de préservation du statut de jeu Unity3d High-Efficacité
La méthode BinaryFormatter peut rencontrer des problèmes dans certains cas (en particulier sur les appareils iOS). Cela dépend de la correspondance des classes pendant Deepertine, il peut donc entraîner une perte de données après la mise à jour ou le remodelage. De plus, il doit ajouter des variables d'environnement à iOS pour éviter les problèmes.
Afin de résoudre ces restrictions et de fournir des solutions plus puissantes, il est recommandé d'utiliser PlayerPrefs et JSON pour enregistrer l'état du jeu. PlayerPrefs fournit un mécanisme pratique qui peut utiliser une petite quantité de données comme valeurs clés pour le stockage, et JSON (notation d'objet JavaScript) fournit un format structuré qui peut facilement le convertir en objets et le convertir des objets.
Cette méthode peut être encore améliorée en convertissant la chaîne JSON en tableau d'octets et en utilisant
et pour lire et écrire des données. File.WriteAllBytes
File.ReadAllBytes
Ce qui suit est une démonstration générale de cette technologie.
Ce type d'utilisation est le suivant: DataSaver
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); } }
et utilise
pour assurer la durabilité des données et corriger le problème de codage. N'oubliez pas d'ajouter des attributs// 要保存的示例类 [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); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!