数据持久化之PlayerPrefs

PlayerPrefs是Unity提供的一个数据持久化的解决方案。

所谓数据持久化就是需要将内存中的数据转存到本地硬盘或服务器中,以此来达到数据保存。

PlayerPrefs存储相关:

PlayerPrefs的数据存储类似于键值对存储,一个值对应一个键。

提供了存储3种数据的方法:int,float,string

但注意,键类型只有string类型,值类型有int,float,string对应三种方法。

PlayerPrefs.SetFloat("HP",hp);
PlayerPrefs.SetInt("MP",mp);
PlayerPrefs.SetString("Name",name);

当游戏结束时,Unity会自动把数据存储到本地,但如果游戏不是正常结束而是崩溃的,数据是不会保存到本地的。

为了避免上述问题的发生,我们可以在set数据之后调用save方法来直接存储到硬盘中。

PlayerPrefs.Save();

PlayerPrefs读取相关:

读取数据使用Get方法:

//其中第二个参数用于没有该键的值时设置默认值,此项适合做基础数据的初始化
PlayerPrefs.GetFloat("HP",100);
PlayerPrefs.GetInt("MP",100);
PlayerPrefs.GetString("Name","Customer");

需要注意,即使我们刚使用玩set方法还没有保存到本地,Unity依然可以找到其中的信息。

PlayerPrefs删除数据:

//删除指定键值对
PlayerPerfs.DeleteKey("Name");
//删除所有存储的信息
PlayerPerfs.DeleteAll();

PlayerPrefs数据存储位置:

不同的平台存储的位置是不同的。

对于Windows:

在windows中,数据存储在注册表中,可以通过以下方式查询并修改。

/*
1. 打开运行
2. 输入regedit打开注册表管理器
3. 按照此路径查找:
	HKEY_CURRENT_USER->
		SOFTWARE->
			Unity->
				UnityEditor->
					公司名称(发布时的设置)->
						项目名称(发布时的设置)
*/

对于IOS:

/Library/Preferences/[应用ID].plist

对于Android:

/data/data/包名/shared_prefs/pkg-name.xml

PlayerPrefs数据唯一性:

PlayerPrefs的数据唯一性是由键值对的存储结构导致的。当然这也带来了当键名重复后带来的数据覆盖问题。

优点:

简单,快捷,易懂。

经过简单的封装可以让PlayerPrefs变得简单而安全。

缺点:

  1. 重复工作量繁多。
  2. 自定义数据类需要实现存储读取功能,重复代码极多。
  3. 数据不安全,数据容易被修改。

主要用处:

适合存储一些数据安全性要求不高的基础数据。