数据持久化:
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。就是内存与硬盘之间数据相互转换存储。
PlayerPrefs基本方法
什么是PlayerPrefs
unity提供的可以用于存储读取玩家数据的公共类
存储相关
数据存储类似于键值对存储,能够存储三种类型int,float,string
其中键只能是string,值可以是以上三种类型,分别对应三种API
PlayerPrefs.SetInt("MyAge", 1);
PlayerPrefs.SetString("MyName", "111");
PlayerPrefs.SetFloat("myHeight", 1.2f);
Set方法会把数据存储到内存里,游戏结束时Unity会把数据存储到硬盘中,若游戏非正常结束,例如崩溃,则不会存储到硬盘中故需要用到以下函数马上将数据存储到硬盘中。
PlayerPrefs.Save();
不同类型但是使用了同一键名存储则会进行覆盖
读取相关
注意:在运行时只要set对应的键值对,就可以读出信息,不需要存储到本地硬盘。假如get的键没有对应的值会返回该值得默认值int和float都是0,string是空字符串
//int
int age = PlayerPrefs.GetInt("myAge");
print(age);
//如果找不到myAge对应的值 就会返回函数的第二个参数
age =PlayerPrefs.GetInt("myAge",100);
print(age);
//float
float height = PlayerPrefs.GetFloat("myHeight", 1000f);
print(height);
//string
string name =PlayerPrefs.GetString("myName");
print(name);
第二个参数的作用:
在得到没有的数据时可以进行基础数据的初始化
判断是否存在该键,防止数据赋值时覆盖
if (PlayerPrefs.HasKey("Myname"))
{
print("该键已存在");
}
删除相关
删除指定键值对
PlayerPrefs.DeleteKey("MyName");
删除所有数据
PlayerPrefs.DeleteAll();
PlayerPrefs不同平台存储位置
Windows
PlayerPrefs 存储在HKCU\Software\[公司名称]\[产品名称]项下的注册表中
其中公司和产品名称是 在“Project settings”中设置的名称
运行 regedit
HKEY_CURRENT_USER
SOFTWARE
Unity
UnityEditor
公司名称
产品名称
Android
存储在/data/data/包名/shared prefs/pkg-name.xml文件中
IOS
存储在/Library/Preferences/[应用ID].plist文件中
PlayerPrefs数据唯一性
不同数据是由key来唯一确定的,故要保证key的唯一性,否则会发生数据覆盖导致丢失数据
总结
优点:简单,快捷,易懂
缺点:重复工作量繁多,自定义数据类都需要自己实现存储读取的功能,且代码相似度极高。数据容易被修改,只要找到文件的位置,数据就能够被轻易的修改。
主要用处:单独使用原生功能,适合存储一些对安全性要求不高的简单的数据。
但是对其进行简单的封装也可以变的简单又安全