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 方法仍返回默认值,不会报错。
3464

被折叠的 条评论
为什么被折叠?



