数据持久化之PlayerPrefs

1、什么是数据持久化

数据持久化本质上就是把内存里的数据转移到磁盘上,或者叫做把内存模型转换成磁盘模型,通俗一点讲就是游戏存档。
在这里插入图片描述
在游玩的时候经常会遇到异常退出丢失数据的情况,丢失数据本质上就是内存的数据没有转移到磁盘上,从上面的图可以看出玩家在游戏运行的时候内存里有HP,Speed,Attack等属性,但如果玩家没有在游戏运行的时候保存数据,那么这些数据就会丢失。我们平时游玩的数据都是在内存里的,如果程序异常退出那么内存的数据就会丢失。
因此数据持久化就是把HP,Speed,Attack等属性存到磁盘里,然后游戏再运行的时候从磁盘里拿取数据,这样就是一个很常见的存档读档操作了。

2、PlayerPrefs是什么

2.1 定义

PlayerPrefs是Unity提供的用于存储和读取玩家数据的公共类,从下面的声明中可以看出来,PlayerPres用的是类似于哈希表那样的键值对形式,读取很方便。

	[NativeMethod("SetInt")]
    [MethodImpl(MethodImplOptions.InternalCall)]
    private static extern bool TrySetInt(string key, int value);

    [NativeMethod("SetFloat")]
    [MethodImpl(MethodImplOptions.InternalCall)]
    private static extern bool TrySetFloat(string key, float value);

    [NativeMethod("SetString")]
    [MethodImpl(MethodImplOptions.InternalCall)]

2.2 使用场景

适用于存储简单的玩家偏好设置和游戏进度数据。比如简单的存个攻击力或者防御力之类的数据。

3、存储用法

仅支持3种数据类型:

int: PlayerPrefs.SetInt("key", value)
float: PlayerPrefs.SetFloat("key", value)
string: PlayerPrefs.SetString("key", value)

3.1 存储位置

初始存储: 调用Set方法后数据仅存于内存。
持久化存储: 游戏正常结束时Unity自动存入硬盘。
立即存储: 调用PlayerPrefs.Save()可立即存入硬盘。
异常情况: 游戏崩溃时未保存数据会丢失。

3.2 读取用法

int: PlayerPrefs.GetInt("key")
float: PlayerPrefs.GetFloat("key")
string: PlayerPrefs.GetString("key")

所有Get方法都有带默认值的重载版本
示例: PlayerPrefs.GetInt("key", defaultValue)
优先从内存读取,内存没有才从硬盘读取。

3.3 删除用法

删除指定键: PlayerPrefs.DeleteKey("key")
删除所有数据: PlayerPrefs.DeleteAll()
**使用场景:**测试时清理数据或者实现"删除存档"功能。

4、总结

PlayerPrefs 概述

  • Unity 提供的用于存储和读取玩家数据的公共类,支持 int、float、string 三种数据类型。
  • 键必须为 string类型,值仅限三种指定类型。

数据存储(Set)

  • 使用 SetInt、SetFloat、SetString 方法存储键值对,数据暂存内存,游戏正常结束时自动写入硬盘。
  • 崩溃时数据丢失,需调用 Save() 强制写入硬盘。
  • 键名重复会覆盖(无论类型是否相同)。

数据读取(Get)

  • 通过 GetInt、GetFloat、GetString 读取数据,支持默认值参数(未找到键时返回)。
  • 类型不匹配返回默认值(如用GetInt 读取 float 类型键返回 0)。

数据类型扩展

  • 非原生类型(如 bool、double)需通过类型转换存储(如 bool 转 int 的 0/1)。
  • 精度损失风险(如 double 强转float)。

数据删除

  • DeleteKey 删除指定键值对;DeleteAll 清空所有数据,慎用于生产环境。
  • 测试时常用DeleteAll,实际功能中需明确删除逻辑。

存在性检查

  • HasKey 判断键是否存在,主要用于避免键名冲突而非安全性检查。
  • 无对应键时 Get 方法仍返回默认值,不会报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值