Unity-存档与读档

1. PlayerPrefs。

采用键值对的方式对数据进行存储。

PlayerPrefs.SetInt("Index",1); 
// 可以存储Int, Float, String类型的数据。
PlayerPrefs.SetFloat("Height",183.5f); 
PlayerPrefs.SetString("Name","Tom");
// 查看数据是否存在
if (PlayerPrefs.HasKey("Index"))
	// 获取数据:
	PlayerPrefs.GetInt("Index");
2. 二进制保存
  1. 首先创建可实例化的Save
[System.Serializable]
public class Save
{
    public string stringData;
    public float floatData;
    public int intData;
    // 三维坐标
    float[] pos = new float[3];
	// 设置坐标
    public void PosSet(Vector3 vector3)
    {
        pos[0] = vector3.x;
        pos[1] = vector3.y;
        pos[2] = vector3.z;
    }
	// 读取坐标
    public Vector3 PosGet()
    {
        return new Vector3(pos[0], pos[1], pos[2]);
    }
}

因为三维向量坐标不能直接保存,所以需要间接保存

引入
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
2. 保存

public void Save()
{

    // 二进制保存
    Save save = new Save();
    save.stringData = stringObj.GetComponent<DataText>().inputField.text;
    save.floatData = float.Parse(floatObj.GetComponent<DataText>().inputField.text);
    save.intData = int.Parse(intObj.GetComponent<DataText>().inputField.text);
    save.PosSet(dragObj.transform.position);

    // 创建一个二进制格式化程序
    BinaryFormatter bf = new BinaryFormatter();
    // 创建一个文件流
    // 位置:C:\Users\用户名\AppData\LocalLow\公司名\项目名
    FileStream file = File.Create(Application.persistentDataPath + "/gamesave.save");
    bf.Serialize(file, save);
    file.Close();

    Debug.Log("已存档");
}
  1. 读取
public void Load()
{
    // 如果文件存在
    if (File.Exists(Application.persistentDataPath + "/gamesave.save"))
    {

        // 创建一个二进制格式化程序
        BinaryFormatter bf = new BinaryFormatter();
        // 创建一个文件流
        FileStream file = File.Open(Application.persistentDataPath + "/gamesave.save", FileMode.Open);
        Save save = (Save)bf.Deserialize(file);
        file.Close();

        stringObj.GetComponent<DataText>().inputField.text = save.stringData;
        floatObj.GetComponent<DataText>().inputField.text = save.floatData.ToString();
        intObj.GetComponent<DataText>().inputField.text = save.intData.ToString();
        dragObj.transform.position = save.PosGet();

        Debug.Log("已读档");
    }
}
3. XML保存
  1. 实体类
using System.Collections.Generic;
using System.Xml.Serialization;

[System.Serializable]
public class XmlSerlize
{
    // 属性
    [XmlAttribute("Id")]
    public int Id { get; set; }
    [XmlAttribute("Name")]
    public string Name { get; set; }
    // 元素内容
    [XmlElement("List")]
    public List<int> Infors { get; set; }
}
  1. 保存
void SerilizeSave()
{
    // 初始化
    XmlSerlize xmlSerlize = new XmlSerlize();
    xmlSerlize.Id = 1;
    xmlSerlize.Name = "liluo";
    xmlSerlize.Infors = new List<int>() { 1, 2, 3, 4 };

    XmlSerializer xml = new XmlSerializer(xmlSerlize.GetType());
    // 创建一个文件流
    FileStream file = new FileStream(Application.persistentDataPath + "/save.xml", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
    StreamWriter sw = new StreamWriter(file, System.Text.Encoding.UTF8);
    xml.Serialize(sw, xmlSerlize);
    sw.Close();
    file.Close();
}
  1. 读取
void SerilizeLoad()
{
    FileStream file = new FileStream(Application.persistentDataPath + "/save.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
    XmlSerializer xml = new XmlSerializer(typeof(XmlSerilize));
    XmlSerilize xmlSerlize = (XmlSerilize)xml.Deserialize(file);
    file.Close();

    Debug.Log(xmlSerlize.Id);
    Debug.Log(xmlSerlize.Name);
    foreach (var xmls in xmlSerlize.Infors)
        Debug.Log(xmls);
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莉萝爱萝莉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值