unity自带的数据持久化方案PlayerPrefs

PlayerPrefs类

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

1.存储机制

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

PlayerPrefs中的存档数据

数据键(Key)

数据值(Value)

数据类型

NicName

水月花

string

Level

10

int

AtkSpeed

1.3

float

HP

576

int

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

2.存储路径

PlayerPrefs本质上也是将数据存储在设备某一个目录下的文件中,然而不同的平台数据存储路径也不一样,表10-2-2列出了各个平台下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中的静态方法如表10-2-3所示。

PlayerPrefs中的静态方法

方法

含义

SetFloat()、GetFloat()

存储、读取float类型的数据

  SetInt()、GetInt()

存储、读取int类型的数据

   SetString()、GetString()

  存储、读取string类型的数据

DeleteAll()

删除所有已存储数据

DeleteKey()

删除某个Key值的数据

HasKey()

判断是否存在该Key值的数据

Save()

立即将缓存中的数据写入磁盘文件中

4.应用案例

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

①打开Unity,创建一个名为PlayerPrefsDemo的新工程,如图10-2-1所示。

                                        创建PlayerPrefs基本用法测试工程

②创建两个场景SceneA和SceneB,然后创建一个名为SaveData.cs的脚本并挂到SceneA主相机下,再创建一个名为ReadData.cs的脚本并挂到SceneB主相机下,如图10-2-2所示。

           

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场景。可以看到,在控制台面板输出了之前存储的三个数据值,如图10-2-3所示。

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值