首先借鉴游戏开发中的存档与读档
- 存档
- PlayerPrefs的工作原理
- PlayerPrefs的作用
- 存储类型
- 存储数据序列化
- 三种序列化方法:二进制方法,XML方法,方法
- 二进制方法
- XML方法
- Json方法
- 三种存储方式比较
存档
在unity3d里面,存档和读档主要用到PlayerPrefs类。
PlayerPrefs是unity提供的一个用于数据本地持久化保存和读取的类。
链接: Unity官方关于PlayerPrefs的API文档.
PlayerPrefs的工作原理
以kety-value的形式将数据保存到本地,然后在代码中可以写入、读取、更新数据。
官方文档:采用键值对的方式对数据进行存储—保存在本地文件(不同操作系统存储路径不同)中,然后程序可以根据这个名称取出上次保存的数值)
PlayerPrefs的作用
存储一些非关键性的数据,对于没有服务器的单机游戏,游戏存档和分数排名等都需要用到数据存储,可以用PlayerPreds轻松实现
存储类型
可以存储int,float,string类型的数据
Static Methods | - |
SetInt | Sets the value of the preference identified by key. |
SetFloat | Sets the value of the preference identified by key. |
SetString | Sets the value of the preference identified by key. |
Save | Writes all modified preferences to disk. |
HasKey | Returns true if key exists in the preferences. |
GetString | Returns the value corresponding to key in the preference file if it exists. |
GetInt | Returns the value corresponding to key in the preference file if it exists. |
GetFloat | Returns the value corresponding to key in the preference file if it exists. |
DeleteKey | Removes key and its corresponding value from the preferences. |
DeleteAll | Removes all keys and values from the preferences. Use with caution. |
例子:
//存储数据
PlayerPrefs.SetInt("Index",1);
PlayerPrefs.SetFloat("Height",183.5f);
PlayerPrefs.SetString("Name","Tom");
//获取数据
PlayerPrefs.GetInt("Index");
PlayerPrefs.GetFloat("float");
PlayerPrefs.GetString("string");
//删除与查找数据
PlayerPrefs.DeleteAll();
PlayerPrefs.DeleteKey("name");
bool exist = PlayerPrefs.HasKey("name");
数据是以键值对的形式存储的,可以看作是一个字典;数据读取时通过键名来读取,如果值不存在则返回默认值。
存储数据序列化
Serialization(序列化):可以用来将对象转化为字节流。
Deserialization(反序列化):可以用来将字节流转换为对象。
常见的数据序列化方法:二进制方法,XML方法,JSON方法
存储位置:内存、文件、数据库–可存于本地或云
windows下PlayerPrefs存档主要存储在注册表里面,
路径:HKCU\Software\AppDataLow\Software\CompanyName\ProductName
三种序列化方法:二进制方法,XML方法,方法
二进制方法
序列化:新建/打开一个二进制文件,通过二进制格式器将对象写入。
反序列化:打开二进制文件,再通过二进制格式器解析成对象。
XML方法
XML:扩展标记语言,用于标记电子文件,使其具有结构性。
序列化与反序列化与二进制方法相似
优点:1. 文件可读性强 2. 升级版本后,如果增加了字段,则自动采用类中赋给该变量的值 3. 升级版本后,如果删除了字段,则自动忽略之前的字段,不会出现报错
缺点:1. 冗余信息多 2. 不可以序列化字典,二维数组以上的数据
Json方法
Json:跨平台数据传输
序列化:
graph LR
对象-->JSON
反序列化:
graph LR
JSON-->对象
优点:1. 使用简单 2. 可以满足几乎所有的数据类型(除了float需要用double来储存) 3. 如果更新版本,新增删除字段,跟XML处理结果一样。
缺点:1. 数据格式不直观,可读性比XML差 2. 不能序列化 float 类型 3. 不支持更改字段名,如果更改,则会删除之前的并新增一个新的。
三种存储方式比较
二进制:简单,可读性差;
XML:可读性强,但文件大,冗余信息多;
JSON:数据格式比较简单,易于读写,但是不直观,可读性比XML差。