Heim > Backend-Entwicklung > C++ > Wie kann ich Spieldaten in Unity3D mit JSON und PlayerPrefs robust speichern und laden?

Wie kann ich Spieldaten in Unity3D mit JSON und PlayerPrefs robust speichern und laden?

DDD
Freigeben: 2025-01-31 18:06:12
Original
708 Leute haben es durchsucht

How to Robustly Save and Load Game Data in Unity3D using JSON and PlayerPrefs?

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>
Nach dem Login kopieren
Dieses Beispiel verbessert die Fehlerverarbeitung, verwendet einen häufigeren Typ

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>
Nach dem Login kopieren
Attribute hinzuzufügen.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage