Unity数据存储——本地playerPref存储

本文详细介绍了Unity中PlayerPrefs的使用,包括数据存储、读取、删除及检查方法。建议直接存储数值和字符串,避免频繁操作,并利用特定关键词检测存储状态。同时,建议将bool值转换为string存储,通过`HasKey`检查数据是否存在,并提供示例代码展示PlayerPrefs的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值