Unity借助BinaryFormatter用二进制来储存游戏数据

BinaryFormatter 是以二进制的形式序列化和反序列化

序列化:将对象转化成二进制;
反序列化:将二进制转化成对象

引用命名空间:System.Runtime.Serialization.Formatters.Binary

储存数据方法:Serialize(FileStream, Data):将指定的流 序列化 成对象
取出数据方法:Deserialize(FileStream):将指定的流 反序列化 成对象

下面是代码

//游戏存档工具类
public static class FileTool
{
    ///储存游戏数据文件的路径
    private static string path
    {
        get
        {
            return GetPath();
        }
    }
     /// <summary>
    /// 设置文件的路径,
    /// 在手机上运行时Application.persistentDataPath这个路径才是可以读写的路径
    /// PC上可以放在StreamingAssetsPath中
    /// </summary>
    static string GetPath()
    {
        return Application.streamingAssetsPath + "/playerData.gd";
    }
  /// <summary>
    /// 储存游戏静态方法
    /// </summary>
    /// <param name="fileName">存档的名称</param>
    public static void SaveFile(string fileName)
    {
   		 //当前的数据
        Data fileData = GetData();
		//存档名称
        fileData.fileName = fileName;
        fileData.fileTimer = DateTime.Now;
		
		//保存新数据
		SaveData(fileData );
	}
	/// <summary>
    /// 加载游戏
    /// </summary>
    public static void LoadDta()
    {
        Data fileData = GetData();
        Debug.Log(fileData.fileName);
        Debug.Log(fileData.fileTimer);
	}
 	/// <summary>
    /// 保存游戏数据
    /// </summary>
    /// <param name="data"></param>
    public static void SaveData(Data data)
    {
        //保存数据
        BinaryFormatter bf = new BinaryFormatter();
        if (File.Exists(path))
        {
            File.Delete(path);
            //Debug.Log("删除旧的");
        }
        //Debug.Log(path);
        FileStream file = File.Create(path);
        bf.Serialize(file, data);
        file.Close();
    }
	/// <summary>
    /// 获取储存数据
    /// </summary>
    /// <returns></returns>
    public static Data GetData()
    {
        Data playerData;
        //如果路径上有文件,就读取文件
        if (File.Exists(path))
        {
            //读取数据
            BinaryFormatter bf = new BinaryFormatter();
            FileStream file = File.Open(path, FileMode.Open);
            playerData = (Data)bf.Deserialize(file);
            file.Close();
            return playerData;
        }
        //如果没有文件,创建一个空文件并返回
        else
        {
            playerData = new Data();
            return playerData;
        }
    }
}


//要储存的游戏数据
//在里面生命类型就可以
[Serializable]
public class Data
{
    public string fileName;//存档名
    public string fileTimer;//存档时间
}
	
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值