数据持久化
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称
PlayerPrefs的基本方法
PlayerPrefs是什么
是Unity提供的可以用于存储读取玩家数据的公共类
存储相关
PlayerPrefs的数据存储 类似于键值对存储 一个键对应一个值
提供了存储3种数据的方法 int float string
键:string类型
值:int float string 对应3种API
//调用Set相关方法 只会存到内存中
PlayerPrefs.SetInt("myAge",18);
PlayerPrefs.SetFloat("myHeight",177.5f);
PlayerPrefs.SetString("myName","阿喆不想学习");
//当游戏结束时 Unity会自动把数据存到硬盘中
//如果游戏不正常结束 数据不会存到硬盘中
//调用该方法 立刻存储到硬盘中
PlayerPrefs.Save();
//PlayerPrefs有局限性 只能存3种类型的数据
//如果想存储其他类型数据 只能降低精度 或上升精度来进行存储
//如果不同类型用同一键名进行存储 会进行覆盖
PlayerPrefs.SetFloat("myAge",18.2f);
读取相关
//运行时 只要set了对应键值对
//即使没有马上save到本地
//也可以读取
//int
int age = PlayerPrefs.GetInt("myAge");
//若找不到myAge,则会返回默认值100
age = PlayerPrefs.GetInt("myAge",100);
//float
float height = PlayerPrefs.GetFloat("myHeight",1000f);
//String
string height = PlayerPrefs.GetString("myName");
判断数据是否存在
if(PlayerPrefs.HasKey("myName"))
{
print("存在myName的对应数据");
}
删除数据
//删除指定键值对
PlayerPrefs.DeleteKey("myAge");
//删除所有存储的信息
PlayerPrefs.DeleteAll();
PlayerPrefs不同平台的存储位置
PlayerPrefs存储的数据存在哪里
不同平台的存储位置不同
Windows
PlayerPrefs 存储在 HKCU\Software\[公司名称]\[产品名称] 项下的注册表中
其中公司和产品名称实在 “Project Setting->Player Settings” 中设置的名称
查看
运行 regedit
HKEY_CURRENT_USER
SOFTWARE
Unity
UnityEditor
公司名称
产品名称
Android
/data/data/包名/shared_prefs/pkg-name.xml
IOS
/Library/Preferences/[应用ID].plist
PlayerPrefs数据唯一性
PlayerPrefs中不同数据的唯一性有Key决定,不同key决定不同的数据
同一项目中 如果不同数据key相同 会造成数据丢失
要保证数据不丢失就要建立一个保证key唯一的规则
总结
PlayerPrefs缺点
重复工作量繁多
自定义数据类,都需要自己去实现存储读取的功能
而且代码相似度极高
数据容易被修改
只要找到文件位置,就可以轻易的进行数据修改
主要用处
单独使用他的原生功能
非常适合存储一些对安全性要求不高的简单数据
但对它进行简单的封装也可以让它变得方便又安全