Unity数据存储学习之——本地playerPref存储

25 篇文章 1 订阅
3 篇文章 1 订阅

Unity数据存储学习之——本地playerPref存储

提示:

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版本不同路径可能不同)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值