首先借鉴游戏开发中的存档与读档

  • 存档
  • 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差。