Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menyimpan dan memuatkan data permainan dengan kuat di Unity3D menggunakan JSON dan PlayerPrefs?

Bagaimana untuk menyimpan dan memuatkan data permainan dengan kuat di Unity3D menggunakan JSON dan PlayerPrefs?

DDD
Lepaskan: 2025-01-31 18:06:12
asal
762 orang telah melayarinya

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

Kaedah pemeliharaan status permainan yang tinggi Unity3D

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

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);
    }
}
Salin selepas log masuk
Contoh ini meningkatkan pemprosesan ralat, menggunakan jenis yang lebih biasa

, dan menggunakan

untuk memastikan ketahanan data dan membetulkan masalah pengekodan. Ingat untuk menambah atribut
// 要保存的示例类
[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);
}
Salin selepas log masuk
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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan