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
Level 10 int
AtkSpeed 1.3 float

注意:无法存储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的新工程,如图所示。
Unity自带的数据持久化数据 PlayerPrefs_第1张图片

②创建两个场景SceneA和SceneB,然后创建一个名为SaveData.cs的脚本并挂到SceneA主相机下,再创建一个名为ReadData.cs的脚本并挂到SceneB主相机下,如图所示。
Unity自带的数据持久化数据 PlayerPrefs_第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场景。可以看到,在控制台面板输出了之前存储的三个数据值,如图所示。
在这里插入图片描述
Unity自带的数据持久化数据 PlayerPrefs_第3张图片

你可能感兴趣的:(Unity)