提示:
1、存储时,赋值对应的建议直接是数值、字符串,使用引用赋值容易出错
2、由于PlayerPrefs存储数据的位置为注册表,不建议过于频繁存储和读取数据,另外建议使用PlayerPrefs存储数据轻量数据。
一、 要存储的数据:
注:PlayerPrefs只支持 string、int、float三种类型。
using System;
public class Datas
{
public string version;
public int A1;
public float A2;
public float A3;
public string isUsed;
public float B2;
}
小技巧:
1、若保存bool值,可将bool值转为string格式的“True/False”,或int格式的“0/1”处理,方便后期理解和处理判断。如上面Data类设置的isUsed;
string和bool之间的转换:
bool a = Convert.ToBoolean(isUsed);
string isUsed = a.ToString();
2、使用playerPrefs存储了一堆数据,如何判断有没有存储过,或是否存储成功,可在数据里加个关键词:如上面Data类设置的version,专门通过检测这个关键词是否存在/满足条件来判断是否有本地存档。
二、playerPref存储
public Datas datas;
private void Awake()
{
datas = new Datas();
}
private void UpdateUse()
{
PlayerPrefs.SetFloat("ValueA2", datas.A2);
PlayerPrefs.SetString("IsUse", datas.isUsed);
PlayerPrefs.Save();
}
private void SaveData()
{
PlayerPrefs.SetString("Version", datas.version);
PlayerPrefs.SetInt("ValueA1", datas.A1);
PlayerPrefs.SetFloat("ValueA2", datas.A2);
PlayerPrefs.SetString("IsUse", datas.isUsed);
PlayerPrefs.SetFloat("A3", datas.A3);
PlayerPrefs.SetFloat("B2", datas.B2);
PlayerPrefs.Save();
Debug.Log("存档成功");
}
注:
1、playerPref以键值对方式一一对应存储:上面的"ValueA1"就是关键字,后面的datas.A1就是存储的值;
2、语法形式:(存储类型只有三种)
PlayerPrefs.SetString("名称", string值);
PlayerPrefs.SetInt("名称", int值);
PlayerPrefs.SetFloat("名称", float值);
3、每次PlayerPrefs.SetXXX("xx",xx),设置存储内容后,记得保存:PlayerPrefs.Save();
三、playerPref之:是否有存储某个关键字/键,检测是否存储,读取存储值
检查数据,是否有该键
public static bool HasKey(string key);
PlayerPrefs.HasKey("XXXX");
检测是否存储,读取存储值:
private void OnEnable()
{
datas.version = PlayerPrefs.GetString("Version", "");
if (string.IsNullOrEmpty(datas.version))
{
Debug.Log("本地没有存档");
......
......
SaveDatas();
}
ReadDatas();
}
private void GetUse()
{
datas.isUsed = PlayerPrefs.GetString("IsUse", "True");
}
private void ReadDatas()
{
datas.version = PlayerPrefs.GetString("Version", "");
datas.A1 = PlayerPrefs.GetInt("ValueA1", 2);
datas.A2 = PlayerPrefs.GetFloat("ValueA2", 0.3f);
datas.isUsed = PlayerPrefs.GetString("IsUse", "True");
datas.A3 = PlayerPrefs.GetFloat("B2", 10f);
datas.B2 = PlayerPrefs.GetFloat("A3", 0.0f);
Debug.Log("本地存档读取赋值成功");
}
注:
1、判断字符串值是否存在(值为空、值为null等),可以使用:bool x = string.IsNullOrEmpty(datas.version) ;
2、playerPref以键值对方式对应存储:以关键字/键作为目标索引,来获取对应的存储的值;
2、语法形式:(存储类型只有三种)
PlayerPrefs.GetString("名称", 可设置的默认string值);
PlayerPrefs.GetInt("名称", 可设置的默认int值);
PlayerPrefs.GetFloat("名称", 可设置的默认float值);
四、playerPref删除数据
//根据键,删除某个数据
public static void DeleteKey(string key);
PlayerPrefs.DeleteKey("键的名字");
//清空所有数据
public static void DeleteAll();
PlayerPrefs.DeleteAll();
五、playerPref保存位置
PlayerPrefs存储数据的位置为注册表:
HKEY_CURRENT_USER\Software\Company Name\Project Name
其中Company Name和Project Name可以在:
Unity->Edit->Project Settings->Player中设置与查看(unity版本不同路径可能不同)