数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。
说人话:将游戏数据存储到硬盘,硬盘中数据读取到游戏中,也就是传统意义上的存盘。
是Unity提供的可以用于存储读取玩家数据的公共类
PlayerPrefs的数据存储 类似于键值对存储 一个键对应一个值
提供了存储3种数据的方法 int float string
键:string类型
值:int float string 对应3种API
PlayerPrefs.SetInt("myAge", 18);
PlayerPrefs.SetFloat("myHeight", 160.5f);
PlayerPrefs.SetString("myName", "张三");
直接调用Set相关方法 只会把数据存到内存里
当游戏结束时 Unity会自动把数据存到硬盘里
如果游戏不是正常结束的 而是崩溃 数据是不会存到硬盘中的
PlayerPrefs.Save();
只要调用该方法 就会马上存储到硬盘中
PlayerPrefs是有局限性的 它只能存三种类型的数据
如果你想要存储别的类型的数据 只能降低精度 或者上升精度来进行存储
bool sex = true;
PlayerPrefs.SetInt("sex", sex ? 1 : 0);
如果不同类型用同一键名进行存储 会进行覆盖
PlayerPrefs.SetFloat("myAge", 20.2f);
注意:运行时 只要你Set了对应键值对,即使你没有马上存储Save在本地,也能够读取出信息
int age = PlayerPrefs.GetInt("myAge");
print(age);
//如果找不到myAge对应的值 就会返回函数的第二个参数 默认值
age = PlayerPrefs.GetInt("myAge", 100);
print(age);
float height = PlayerPrefs.GetFloat("myHeight");
print(height);
string name = PlayerPrefs.GetString("myName");
//第二个参数 默认值 对于我们的作用
//就是 在得到没有的数据的时候 就可以用它来进行基础数据的初始化
if (PlayerPrefs.HasKey("myName"))
{
print("存在myName对应的键值对数据");
}
//删除指定键值对
PlayerPrefs.DeleteKey("myAge");
//删除所有存储的信息
PlayerPrefs.DeleteAll();
PlayerPrefs 存储在
HKCU\Software\[公司名称]\[产品名称] 项下的注册表中
其中公司和产品名称是 在“Project Settings”中设置的名称
运行 regedit
HKEY_CURRENT_USER
SOFTWARE
Unity
UnityEditor
公司名称
产品名称
/data/data/包名/shared_prefs/pkg-name.xml
/Library/Preferences/[应用ID].plist
PlayerPrefs中不同数据的唯一性
是由key决定的,不同的key决定了不同的数据
同一项目中 如果不同数据key相同 会造成数据丢失
要保证数据不丢失就要建立一个保证key唯一的规则
PlayerPrefs优点:PlayerPrefs是数据持久化系列中最简单的一部分内容,简单、快捷、易懂
PlayerPrefs缺点:
主要用处:
单独使用它的原生功能,非常适合存储一些对安全性要求不高的简单数据,但是也不能小看它,对它进行简单的封装,也可以让它变得方便又安全