Unity学习-数据持久化之PlayerPrefs

781 阅读3分钟

一.引言

Unity也有属于自己的本地数据化工具,就像Android中的SharedPreferences,下面先介绍一个PlayerPrefs

二.PlayerPrefs基本方法

  1. 数据写入
    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);
      
  2. 数据读取
    运行时只要你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对应的键值对数据");
          }
      
  3. 删除数据
            //删除指定键值对
            PlayerPrefs.DeleteKey("myAge");
            //删除所有存储的信息
            PlayerPrefs.DeleteAll();
    

三.PlayerPrefs存储数据的位置

不同的打包平台存储位置自然不同,下面介绍三个平台的存储位置

  1. Windows image.png win+R,输入regedit,打开注册表,找到如上图所示的位置即可,基本路径如下: HKEY_CURRENT_USER\SOFTWARE\Unity\UnityEditor\公司名称\产品名称
    公司名称和产品名称,在File->Build Settings->Player Settings中可以看到 image.png
  2. Android
    做过Android开发的朋友可能会惊讶,这路径就和Android中的SharedPreferences差不多
    /data/data/包名/shared_prefs/pkg-name.xml
  3. IOS
    /Library/Preferences/[应用ID].plist 关于PlayerPrefs的数据存储,这里稍微提个醒,PlayerPrefs中不同数据的唯一性是由key决定的,不同的key决定了不同的数据,同一项目中,如果不同数据key相同,会造成数据丢失,要保证数据不丢失就要建立一个保证key唯一的规则

四.总结

下面对PlayerPrefs的优缺点进行一个总结

  • 优点
    简单、快捷、易懂、易上手
  • 缺点
    重复工作繁多,每次自定一个数据类都要实现一遍存取操作,另外就是数据安全性低 总的来说,使用它来存储一些简单没有安全性要求的数据比较方便,后续会对PlayerPrefs做一个实践,包括封装,让它变得简洁以及安全