首要要思考一个问题:什么是数据持久化?
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。通俗来讲就是将游戏数据存储到硬盘,硬盘中数据读取到游戏中,也就是传统意义上的存盘。
PlayerPrefs是unity提供的可以用于存储读取玩家数据的公共类,PlayerPrefs的数据存储类似于键值对存储,即一个键对应一个值。它提供了存储3种数据的方法,分别是int、float、string。键的类型为string类型,而值int float string对应3种API。
举个例子:
PlayerPrefs.setInt( "myAge",21); PlayerPrefs.SetFloat( "myHeight", 120f); PlayerPrefs.setstring("myName","张三");
PlayerPrefs会直接调用set相关方法只会把数据存到内存里,当游戏结束时unity会自动把数据存到硬盘中。如果游戏不是正常结束的而是崩溃数据是不会存到硬盘中的,只要调用该方法就会马上存储到硬盘中。
PlayerPrefs.Save();
PlayerPrefs是有局限性的它只能存3种类型的数据。如果你想要存储别的类型的数据只能降低精度或者上升精度来进行存储。
bool sex = true; PlayerPrefs.SetInt( "sex", sex ?1 : 0);
如果不同类型用同一键名进行存储会进行覆盖
PlayerPrefs.setFloat( "myAge",20.2f);
读取相关的API
运行时,只要我们Set了对应键值对,即使没有马上存储Save在本地,也能够读取出信息。
PlayerPrefs.GetInt(string , value) //第二个参数就是默认值,若不存在,那么就直接取第二个参数作为返回值 GetInt、GetFloat、GetString//同理 PlayerPrefs.HasKey(string) //判断string为key的值是否存在 PlayerPrefs.DeleteKey(“myAge”); //删除某个键值对 PlayerPrefs.DeleteAll();//删除所有的键值对
举个例子:
//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();//删除所有存储的信息