进行本地数据存档和载入在游戏开发中非常常见,几乎任何一款游戏都需要这样的功能。

命名空间:

using System.IO;

主要用于引入File类以处理各类文件操作。

using System.Runtime.Serialization.Formatters.Binary;

用于对文件进行序列化与反序列化。

1.判断数据文件是否存在:

     static public bool HasGameSaveData(string fileName)
{
if (File.Exists(Application.persistentDataPath + "/" + fileName))
return true;
else
return false;
}

主要用到File.Exists(string filePath);方法

Application.persistentDataPath是相对路径,用于在不同的平台都能得到正确的路径

2.读(存档载入)

     static public GameSaveData saveData= new GameSaveData();

     static public void LoadGameSaveData(string fileName)
{
if (!HasGameSaveData(fileName))
{
NewGameSaveData(fileName);
}
else
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/" + fileName, FileMode.Open);
saveData = (GameSaveData)bf.Deserialize(file);
file.Close();
}
}

GameSaveData也就是游戏中要保存的某个数据类,这里就省略了

读取数据要先判断文件是否存在,没有就新建一个;NewGameSaveData(fileName);中初始化后一般会立马写入(如何写见后面)

读取的过程是将文件打开后反序列化为对应的类型,也就是将二进制文件转化为可直接处理的对象

如果用到了Easy Save插件,也可以这么读取:

     static public void LoadGameSaveData(string fileName,string fileKey,string filePassCode)
{
if (!HasGameSaveData(fileName))
{
NewGameSaveData(fileName);
}
else
{
var passCodeSet = new ES3Settings(ES3.EncryptionType.AES, filePassCode);//数据加密设置
saveData = ES3.Load<GameSaveData>(fileKey, Application.persistentDataPath + "/" + fileName, passCodeSet);
}
}

Easy Save可以很方便的给文件加密,这里用的第三个版本;其中filePassCode是文件解密的密码,它的后台用的是Rijndael算法

3.写(存档)

     static public void WriteGameSaveData(string fileName)
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/" + fileName);
bf.Serialize(file, saveData);
file.Close();
}

写入文件和读取比较类似,是将对象序列化为二进制文件流;一般一个数据对象在初始化结束后,会自动运行一次写操作,其余时候则根据玩家的交互必要的时候进行写入

同样的,Easy Save的版本如下:

     static public void WriteGameSaveData(string fileName,string fileKey,string filePassCode)
{
var passCodeSet = new ES3Settings(ES3.EncryptionType.AES, filePassCode);//设置加密
ES3.Save<GameSaveData>(fileKey, Application.persistentDataPath + "/" + fileName, passCodeSet);
}

对于同一个文件,读和写的fileName,fileKey,filePassCode应保持一致

4.移除

     static public void RemoveGameSaveData(string fileName)
{
if (HasGameSaveData(fileName))
{
File.Delete(Application.persistentDataPath + "/" + fileName);
}
}

Unity C# File类 本地数据保存和游戏存档的更多相关文章

  1. 使用File类、StreamRead和StreamWrite读写数据、以及Path类操作文件路径和Directory

    1.File类的概念: File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量 ...

  2. JAVA基础--JAVA 集合框架(泛型、file类)16

    一.集合总结 集合:Collection体系.Map体系. Collection体系:单列集合的共性操作规则. List:列表,可以重复,有下标,拥有特有的迭代器ListIterator. Array ...

  3. JAVA基础--JAVA 集合框架(泛型、file类)

    一.集合总结 集合:Collection体系.Map体系. Collection体系:单列集合的共性操作规则. List:列表,可以重复,有下标,拥有特有的迭代器ListIterator. Array ...

  4. 01.使用File类读写文件

    使用File类去读数据: 方法一:使用ReadAllBytes(); 方法 namespace _01.使用File类读写数据01 { class Program { static void Main ...

  5. unity 通过JsonUtility实现json数据的本地保存和读取

    本文主要讲解json数据在本地的保存和读取,使用的是unity5之后提供的JsonUtility工具. 一.关于json数据的保存 在实际开发中,有时候可能涉及到大量数据保存到本地,以便于下次客户端的 ...

  6. c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来

    在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 我的理解是通过某个特殊的标签来保存在本地,而且该标签为key的意思,初始值不用赋值. 在游戏开发中较为实用. 暂时用到了 Se ...

  7. Unity本地数据存储---Sqlite和JSON

    2014-05-04更新 SqliteDatabase.cs这个文件的初始方法有问题,具体是如果指定URL已经存在了DB文件,就不会重新覆盖DB文件. 这导致我们修改之后的DB文件无法产生效果. 本人 ...

  8. 本地数据Store。Cookie,Session,Cache的理解。Timer类主要用于定时性、周期性任务 的触发。刷新Store,Panel

    本地数据Store var monthStore = Ext.create('Ext.data.Store', { storeId : 'monthStore', autoLoad : false, ...

  9. Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)

    下面通过一个例子将联系人数据保存到沙盒的“documents”目录中.(联系人是一个数组集合,内部为自定义对象). 功能如下: 1,点击“保存”将联系人存入userList.plist文件中 2,点击 ...

随机推荐

  1. SQL Server中使用SQL语句关闭数据库连接和删除数据库文件

    有时候我们想用DROP DATABASE语句删除数据库和数据库文件,会删不掉,因为有其他人正在使用要删除的数据库,这里有一个方法可以强制断开其它数据库连接,再删除数据库. 假如我们要删除的数据库是[T ...

  2. .Net MVC 提示未能加载文件或程序集

    最近在开发.Net MVC程序时,突然出现未能加载文件或程序集的错误, 错误1 错误2 猜测时由于引用了Swagger,导致Swagger依赖的组件版本和现有版本冲突(现在仍未确定是这个原因),浪费了 ...

  3. C# WinForm自定义通用分页控件

    大家好,前几天因工作需要要开发一个基于WinForm的小程序.其中要用到分页,最开始的想法找个第三方的dll用一下,但是后来想了想觉得不如自己写一个玩一下 之前的web开发中有各式各样的列表组件基本都 ...

  4. 海关单一窗口程序出现网络/MQ问题后自动修复处理

    单一窗口切换了2年多了,由于RabbitMQ或者网络的不稳定,或者升级或者网络调整,等等诸多问题导致了海关单一窗口程序会不定期的出现文件及回执自动处理的作业停止的问题. 最近终于想明白了,把日志监控起 ...

  5. 英语LIGNALOO沉香lignaloo单词

    沉香lignaloo,是瑞香科.沉香属的一种乔木,高5-15米.树皮暗灰色,几平滑,纤维坚韧:小枝圆柱形,具绉纹,幼时被疏柔毛,后逐渐脱落,无毛或近无毛.产于中国广东.海南.广西.福建等地.喜生于低海 ...

  6. Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node_modules

    今天用npm下载yarn,出现Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node ...

  7. E05 【餐厅】What kind of coffee or tea would you like?

    核心句型 What  kind  of  coffee or tea would you like? 你想喝什么咖啡或者茶? What  would  you like? 你喜欢什么?/你想要什么? ...

  8. ping脚本--无网不利

    一.本文主要涉及的内容 二.预备知识 1.打印网络接口列表 2.提取IP地址的小套路 3.更改网卡的MAC地址 4.高速的ping工具:fping 三.套路连招 1.通过一个for循环和ping列出所 ...

  9. 反射&异常

    反射 通过字符串映射或修改程序运行时的状态.属性.方法.python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执 ...

  10. Excel-逻辑函数

    1.Excel计算的两种方式 Excel计算的两种方式: 1.公式:一些运算符和数值组成的数学表达式 2.函数:是Excel内部设置好的运算模块 2.EXcel的运算符 3.运算顺序 4.excel公 ...