分类
C# Unity

Unity存档系统

unity存档系统

1.Player Prefs

只能存取三种类型,用键来读取。官方是给存储玩家偏好设置的,但是用来存档也可。

优点简单易用,缺点数据不安全

不同平台存储位置不一样,Windows数据存储在注册表中

把下面代码给button点击事件,即可实现存取档

void SaveByPlayerPrefs()
{
            PlayerPrefs.SetString("PlayerName", playerName);
            PlayerPrefs.Save();
}
void LoadByPlayerPrefs()
{
            playerName = PlayerPrefs.GetString("PlayerName");
}
//GetString可以有第二个参数,意义是读不到我们特定的键时返回的值,我们//可以写成"存档损害或没有该存档"
//删除可用PlayerPrefs.DeleteAll()和PlayerPrefs.DeleteKey()
//PlayerPrefs其实还有JsonUlliity在注册表中存储json串。

2.json

接下来为了实现一下保存的demo,我们在场景中创建点组件

为了结构简单,我们建一个普通的就是不继承mono的C#脚本,我命名为 jsonSave.cs

using System.Collections;
using System.IO;
using System.Collections.Generic;
using UnityEngine;
public static class jsonSave
{
public static void SaveByJson(string SaveFileName,object data)
{
var json = JsonUtility.ToJson(data);
var path = Path.Combine(Application.persistentDataPath, SaveFileName);
File.WriteAllText(path, json);
}
public static T LoadFromJson<T>(string SaveFileName)
{
    var path = Path.Combine(Application.persistentDataPath, SaveFileName);
    var json = File.ReadAllText(path);
    var data = JsonUtility.FromJson<T>(json);
    return data;
}
public static void DeleteSaveFile(string SaveFileName)
{
    var path = Path.Combine(Application.persistentDataPath, SaveFileName);
    File.Delete(path);
}
}

下面在挂载在一个gameobject上的脚本添加如下代码,并把刚在ui界面上创建的组件拖到咱们的脚本公有接口上。

[System.Serializable]class SaveData
//可序列化标记,不然不能被正确转换json
    {
        public string savedata1;
        public int savedata2;
        public Vector3 savedata3;
    }

    SaveData SavingData()
    {
        var saveData = new SaveData();
        saveData.savedata1 = data1.text;
        saveData.savedata2 = int.Parse(data2.text);
        saveData.savedata3 = transform.position;
        return saveData;
    }

  public Text data1;
  public Text data2;

    public void SaveByJson()
    {
        jsonSave.SaveByJson("data.txt",SavingData());
    }


    public Text loaded1;//开放共有字段
    public Text loaded2;


    void Loadjson(SaveData saveData)
    {
        loaded1.text = saveData.savedata1;
        loaded2.text = saveData.savedata2.ToString();
        transform.position = saveData.savedata3;

    }
    public void LoadByJson()
    {
        var loaddata = jsonSave.LoadFromJson<SaveData>("data.txt");
        Loadjson(loaddata);
    }
    public void DeleteJson()
    {
        jsonSave.DeleteSaveFile("data.txt");
    }

支持unity序列化的字段如下

以上两个方法来自b站的亲爱的阿婆主

[Unity] 存档系统 Part 1 | PlayerPrefs | Unity初学者系列教程 | 数据存取 | 存档读档 | Save&Load_哔哩哔哩_bilibili

3.数据库云存档(以mysql为例)

目前正在更新中