unity3d High -Efficiency -Spielstatus -Erhaltung Methode
BinaryFormatter -Methode kann in einigen Fällen auf Probleme stoßen (insbesondere auf iOS -Geräten). Es hängt von der Klassenübereinstimmung während des tieferen Abschnitts ab, daher kann dies nach dem Aktualisieren oder Umbau von Datenverlusten zu einem Datenverlust führen. Darüber hinaus müssen iOS Umgebungsvariablen hinzugefügt werden, um Probleme zu vermeiden.
Um diese Einschränkungen zu lösen und leistungsfähigere Lösungen bereitzustellen, wird empfohlen, PlayerPrefs und JSON zu verwenden, um den Spielstatus zu speichern. PlayerPrefs bietet einen bequemen Mechanismus, der eine kleine Datenmenge als Schlüsselwerte für die Speicherung verwenden kann, und JSON (JavaScript -Objektnotation) bietet ein strukturiertes Format, das es problemlos in Objekte umwandeln und aus Objekten umwandeln kann.
Diese Methode kann weiter verbessert werden, indem die JSON -Zeichenfolge in Byte -Array konvertiert und
und zum Lesen und Schreiben von Daten verwendet werden. File.WriteAllBytes
File.ReadAllBytes
Folgendes ist eine allgemeine Vorlage dieser Technologie
Diese Art der Verwendung ist wie folgt: 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>
und verwendet
, um die Haltbarkeit von Daten zu gewährleisten und das Codierungsproblem zu beheben. Denken Sie daran, Ihre -Klasse<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>
Das obige ist der detaillierte Inhalt vonWie kann ich Spieldaten in Unity3D mit JSON und PlayerPrefs robust speichern und laden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!