Unity自带的数据持久化数据 PlayerPrefs

本文转载自:https://blog.csdn.net/heliocentricism/article/details/109168563

PlayerPrefs类

PlayerPrefs是Unity引擎为了方便开发者而提供的一个专门用于数据持久化的类,其提供了很多静态方法,可以存取程序中不同类型的数据,目前支持的数据类型有整型、浮点型和字符串型,暂不支持其他数据类型。

1.存储机制

PlayerPrefs内部以字典的方式存储所有数据,即每一个数据都是一组键值对(Key-Value Pair)。其中,键(Key)指代数据的名称,必须为string类型且不能重复;而值(Value)则存储了数据值本身,其类型没有限制,可以是任意object类型。

PlayerPrefs中的存档数据

数据键(Key)数据值(Value)数据类型
NicName水月花string
Level10int
AtkSpeed1.3float

注意:无法存储bool类型,可以将bool类型转化为int类型,再进行存储

PlayerPrefs遵循“有则修改,无则添加”的原则,即对于将要存储的某个数据,若在其内部不存在则会以一组新的数据形式添加到其中,否则就会修改对应的数据值。

2.存储路径

PlayerPrefs本质上也是将数据存储在设备某一个目录下的文件中,然而不同的平台数据存储路径也不一样,表列出了各个平台下PlayerPrefs的对应数据存储路径。

PlayerPrefs在不同平台对应的数据存储路径

平台路径
MacOS~/Library/Preferences
Windows注册表中,对应的键为HKCU\Software[company name][product name]
Linux~/.config/unity3d/[CompanyName]/[ProductName]
Android/data/data/pkg-name/shared_prefs/pkg-name.xml

3.常用方法

PlayerPrefs类中包含的方法都是静态方法,可以不需要创建对象而直接通过类名类访问。PlayerPrefs中的静态方法如表所示。

PlayerPrefs中的静态方法

方法含义
SetFloat()、GetFloat()存储、读取float类型的数据
SetInt()、GetInt()存储、读取int类型的数据
SetString()、GetString()存储、读取string类型的数据
DeleteAll()删除所有已存储数据
DeleteKey()删除某个Key值的数据
HasKey()判断是否存在该Key值的数据
Save()立即将缓存中的数据写入磁盘文件中

4.应用案例

下面通过一个简单的案例来巩固一下PlayerPrefs类的基本使用方法,在这个案例中我们会首先通过PlayerPrefs存储几个不同类型的游戏数据,然后再依次把它们都读取出来。

①打开Unity,创建一个名为PlayerPrefsDemo的新工程,如图所示。
在这里插入图片描述

②创建两个场景SceneA和SceneB,然后创建一个名为SaveData.cs的脚本并挂到SceneA主相机下,再创建一个名为ReadData.cs的脚本并挂到SceneB主相机下,如图所示。
在这里插入图片描述
SceneA和SceneB

③打开SaveData.cs脚本,在此脚本的Start()方法中编写存储数据的代码,共存储了玩家的金币(整型)、圆周率(浮点型)以及玩家昵称(字符串型)三种不同类型的数据。代码如下:

/*测试存储游戏数据*/
public class SaveData : MonoBehaviour
{
        void Start ()
        {
                //存储玩家金币
                PlayerPrefs.SetInt("Money", 10000);
                //存储圆周率
                PlayerPrefs.SetFloat("PI", 3.14f);
                //存储玩家昵称
                PlayerPrefs.SetString("NicName", "东方不败");
        }
}

④打开ReadData.cs脚本,在此脚本的Start()方法中编写读取数据的代码,共存储了玩家的金币(整型)、圆周率(浮点型)以及玩家昵称(字符串型)三种不同类型的数据。代码如下:

/*读取游戏中存储的数据*/
public class ReadData : MonoBehaviour
{
        void Start ()
        {
                //判断是否存在键为Money的数据
                if(PlayerPrefs.HasKey("Money"))
                {
                        //取出Money的值并打印
                        Debug.Log(PlayerPrefs.GetInt("Money"));
                }
                //判断是否存在键为PI的数据
                if (PlayerPrefs.HasKey("PI"))
                {
                        //取出PI的值并打印
                        Debug.Log(PlayerPrefs.GetFloat("PI"));
                }
                //判断是否存在键为NicName的数据
                if (PlayerPrefs.HasKey("NicName"))
                {
                        //取出NicName的值并打印
                        Debug.Log(PlayerPrefs.GetString("NicName"));
                }
        }
}

⑤首先运行SceneA场景,存入三个数据,然后运行SceneB场景。可以看到,在控制台面板输出了之前存储的三个数据值,如图所示。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值