Unity数据持久化——PlayerPrefs

1.什么是数据持久化

数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。

说人话:将游戏数据存储到硬盘,硬盘中数据读取到游戏中,也就是传统意义上的存盘。

2.PlayerPrefs的基本方法

1.PlayerPrefs是什么

是Unity提供的可以用于存储读取玩家数据的公共类

2.存储相关

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);

3.读取相关

注意:运行时 只要你Set了对应键值对,即使你没有马上存储Save在本地,也能够读取出信息

1.int

int age = PlayerPrefs.GetInt("myAge");
print(age);
//如果找不到myAge对应的值 就会返回函数的第二个参数 默认值
age = PlayerPrefs.GetInt("myAge", 100);
print(age);

2.float

float height = PlayerPrefs.GetFloat("myHeight");
print(height);

3.string

string name = PlayerPrefs.GetString("myName");
 
//第二个参数 默认值 对于我们的作用
//就是 在得到没有的数据的时候 就可以用它来进行基础数据的初始化

4.判断数据是否存在

if (PlayerPrefs.HasKey("myName"))
{
    print("存在myName对应的键值对数据");
}

4.删除数据

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

3.PlayerPrefs在不同平台的存储位置

1.PlayerPrefs存储的数据存在哪里?

1.windows 

PlayerPrefs 存储在
HKCU\Software\[公司名称]\[产品名称] 项下的注册表中
其中公司和产品名称是 在“Project Settings”中设置的名称
 
运行 regedit
HKEY_CURRENT_USER
SOFTWARE
Unity
UnityEditor
公司名称
产品名称

2.Android 

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

3.IOS

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

2.PlayerPrefs数据唯一性 

PlayerPrefs中不同数据的唯一性

是由key决定的,不同的key决定了不同的数据

同一项目中 如果不同数据key相同 会造成数据丢失

要保证数据不丢失就要建立一个保证key唯一的规则

总结: 

PlayerPrefs优点:PlayerPrefs是数据持久化系列中最简单的一部分内容,简单、快捷、易懂

PlayerPrefs缺点:

  1. 重复工作量繁多,自定义数据类,都需要自己去实现存储读取的功能而且代码的相似度极高
  2. 数据容易被修改,只要找到文件位置,就可以轻易的进行数据修改

主要用处:

        单独使用它的原生功能,非常适合存储一些对安全性要求不高的简单数据,但是也不能小看它,对它进行简单的封装,也可以让它变得方便又安全

猜你喜欢

转载自blog.csdn.net/weixin_45274937/article/details/126905778