一.引言
Unity也有属于自己的本地数据化工具,就像Android中的SharedPreferences,下面先介绍一个PlayerPrefs
二.PlayerPrefs基本方法
- 数据写入
PlayerPrefs的存储的数据形式是键值对key-value,一个键对应一个值,可以存储如下三种数据,key都是string类型PlayerPrefs.SetInt("myAge", 18); PlayerPrefs.SetFloat("myHeight", 177.5f); PlayerPrefs.SetString("myName", "C#");- 直接调用Set相关方法只会把数据存到内存里,当游戏结束时Unity会自动把数据存到硬盘中,如果游戏不是正常结束的,而是崩溃,数据是不会存到硬盘中的
- 只要调用该方法,就会马上存储到硬盘中
PlayerPrefs.Save(); - PlayerPrefs是有局限性的,它只能存3种类型的数据,如果你想要存储别的类型的数据,只能降低精度或者上升精度来进行存储,或者进行转换
bool sex = true; PlayerPrefs.SetInt("sex", sex ? 1 : 0); - 如果不同类型用同一键名进行存储会进行覆盖,即便类型不同
PlayerPrefs.SetFloat("myAge", 20.2f);
- 数据读取
运行时只要你Set了对应键值对,即使你没有马上存储Save在本地,也能够读取出信息//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("存在myName对应的键值对数据"); }
- 判断数据是否存在
- 删除数据
//删除指定键值对 PlayerPrefs.DeleteKey("myAge"); //删除所有存储的信息 PlayerPrefs.DeleteAll();
三.PlayerPrefs存储数据的位置
不同的打包平台存储位置自然不同,下面介绍三个平台的存储位置
- Windows
win+R,输入regedit,打开注册表,找到如上图所示的位置即可,基本路径如下:
HKEY_CURRENT_USER\SOFTWARE\Unity\UnityEditor\公司名称\产品名称
公司名称和产品名称,在File->Build Settings->Player Settings中可以看到 - Android
做过Android开发的朋友可能会惊讶,这路径就和Android中的SharedPreferences差不多
/data/data/包名/shared_prefs/pkg-name.xml - IOS
/Library/Preferences/[应用ID].plist关于PlayerPrefs的数据存储,这里稍微提个醒,PlayerPrefs中不同数据的唯一性是由key决定的,不同的key决定了不同的数据,同一项目中,如果不同数据key相同,会造成数据丢失,要保证数据不丢失就要建立一个保证key唯一的规则
四.总结
下面对PlayerPrefs的优缺点进行一个总结
- 优点
简单、快捷、易懂、易上手 - 缺点
重复工作繁多,每次自定一个数据类都要实现一遍存取操作,另外就是数据安全性低 总的来说,使用它来存储一些简单没有安全性要求的数据比较方便,后续会对PlayerPrefs做一个实践,包括封装,让它变得简洁以及安全