news 2026/6/24 3:33:24

数据持久化——PlayerPrefs

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据持久化——PlayerPrefs

内存和硬盘

内存(RAM)是电脑的“临时工作台”

  • 用于临时存放 CPU 正在处理的数据和程序
  • CPU 可直接、快速访问内存中的数据,速度以纳秒(ns)计。
  • 断电后数据全部丢失(易失性存储)。

硬盘(HDD/SSD)是电脑的“永久储物柜”

  • 用于长期存储操作系统、应用程序、文件、图片、视频等
  • 即使关机或断电,数据依然保留(非易失性存储)。
  • 容量大(常见 512GB–2TB+),价格较低(尤其 HDD)。

PlayerPrefs是什么

是Unity提供的可以用于存储读取玩家数据的公共类

PlayerPrefs存储相关

Setxx函数 临时存储到内存结束到硬盘

PlayerPrefs的数据存储——类似于键值对存储,一个键对应一个值

提供了存储3种数据的方法: int/float/string

键:string类型 值:int float string 对应三种API

PlayerPrefs.SetInt(“myAge”,18); PlayerPrefs.SetFloat(“myHeight”,177.5f); PlayerPrefs.SetString (“myName”,“唐老狮”)

1.直接调用Set相关方法,只会把数据存到内存中

2.当游戏结束时 Unity会自动把数据存到硬盘中

3.如果游戏不是正常结束,而是崩溃,数据不会存到硬盘中

Save函数 数据立马存储到硬盘

//只要调用该方法,就会马上存储到硬盘中 PlayerPrefs.Save()

PlayerPrefs的局限性

//因为PlayerPrefs能保存的数据只有三种类型,如果是存储其他类型数据只能降低精度 //比如这里就是——利用int类型做二元判断,然后判断结果作为bool类型的“是与否” bool sex =true; PlayerPrefs.SetInt(“sex”,sex?1:0);
//如果不同类型用同一键名进行存储,会进行覆盖 PlayerPrefs.SetInt(“MyAge”,18); PlayerPrefs.SetFloat(“MyAge”,20.2f); 如同此处——这里之前“MyAge”所对应的值是int类型的18,后面重新赋值float类型的20.2f

读取相关

注意:

运行时,只要你set了对应键值对,即使你没有马上Save在本地,也能够读取出信息:

Set 方法时,数据会先被写入到内存中的缓存,所有 Get 方法(如GetIntGetString)在读取时,会优先从这个内存缓存中查找数据

即使你没有调用PlayerPrefs.Save(),只要在当前运行期间已经通过 Set 设置过某个键,就可以立即通过 Get 读取到该值。

GetXX函数的默认值

读取时,数据中无值/值类型不对应

//这里之前如果"myAge"中无值(或者数据类型不对),就会输出为0 PlayerPrefs.SetInt(“MyAge”,18); PlayerPrefs.SetFloat(“MyAge”,20.2f);//如果不同类型用同一键名进行存储,会进行覆盖 int age = PlayerPrefs.GetInt("myAge"); print(age);//输出为0 //前提是 如果找不到myAge对应的值 就会返回函数的第二个参数 默认值 age = PlayerPrefs.GetInt("myAge", 100); print(age);//输出100

读取时,数据中有值

//因为前面“myHeight”设置了值 PlayerPrefs.SetFloat(“myHeight”,177.5f); float height = PlayerPrefs.GetFloat("myHeight", 1000f); print(height);//输出177.5f

判断数据是否存在

//PlayerPrefs.HasKey("myName") 判断的是当前运行时内存中是否存在键为 "myName" 的数据 if(PlayerPrefs.HasKey("myName")) { prinf(“存在myName对应的键值对数据”); }

删除数据

//删除指定键值对 PlayerPrefs.DeleteKey(“myAge”); //删除所有存储的信息 PlayerPrefs.DeleteAll();

PlayerPrefs存储位置

存储位置因运行平台不同而异,但 API 统一,开发者无需关心底层差异。

Windows系统

打开注册表编辑器:利用WIN+r,输入regedit

HKEY_CURRENT_USER\Software\Unity\UnityEditor $ CompanyName] $ ProductName]

注册表本身是一个持久化的数据库系统,其数据物理存储在硬盘上的用户配置文件中

硬盘中的相关PlayerPref文件

说修改这里的数据会直接改变游戏中的值,我这里并未发生,可能是执行顺序的问题?

Android系统

数据保存在应用私有目录的SharedPreferences中:

/data/data/[包名]/shared_prefs/[包名].xml

PlayerPrefs必须保证数据唯一性

PlayerPrefs中不同数据的唯一性——是由key决定的,不同的key决定了不同的数据。

同一项目中,如果不同数据的key相同,会造成数据丢失,要保证数据不丢失就要建立一个保证key唯一的规则(似乎是哈希表?)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 12:18:09

上海团队与华盛顿大学联手:AI实现医学图像精准识别突破

这项由上海医疗图像洞察(Medical Image Insights)团队的史鹏程、陈佳伟、刘佳琦、张星林,联合华盛顿大学的李雷、滑铁卢大学的陈涛以及西安交通大学的研究人员共同完成的重大研究,于2025年11月发表在arXiv预印本服务器上&#xff…

作者头像 李华
网站建设 2026/6/22 5:22:15

【Python小游戏】深度解析Pygame实现2048游戏的完整开发流程(有代码实现)

目录 第一章 游戏开发的前置准备与环境搭建 第二章 色彩系统与视觉设计的精妙之处 第三章 数据结构与游戏棋盘的状态管理 第四章 游戏逻辑核心:移动与合并算法的深度分析 第五章 游戏状态判定与结束条件的实现 第六章 用户交互与事件处理的完整流程 第七章 渲…

作者头像 李华
网站建设 2026/6/13 23:48:41

模组日志总体介绍

一、本文讨论的边界 本文是对合宙 4G 模组, 以及 4GGNSS 模组的日志功能的总体介绍。通过日志,可以对研发过程中,以及模组运行过程中的各种故障进行分析。二、4G 模组日志的几种类型 4G 模组的日志有两种类型: 业务日志和底层日…

作者头像 李华
网站建设 2026/6/14 0:27:01

一文搞定AI排名SEO的手段:从“反向提问”来优化AI排名

我们过去理解的谷歌排名,大致可以简化为一个公式: 谷歌理解用户的查询,理解你的网页内容,再结合一些外部信号(比如外链),最后给出一个排名。 但在AI模式下,这个公式已经不够用了。…

作者头像 李华
网站建设 2026/6/15 18:18:37

高效筛选20w热点数据,从MySQL 2000w中精准提取

文章目录MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?一、什么是热点数据?二、方法一:日志分析法1. 基本思路2. 实际操作3. 缺点三、方法二:实时统计法1. 基本思路2. 实际…

作者头像 李华
网站建设 2026/6/14 0:44:41

拥有AI员工,才发现误会了领导

人工智能爆火三年,大模型和AI工具好用之后:职场从个人单刷模式,转变成带几个AI助手打团战,可以更高效的干活,但节奏却慢不下来。打工人成领导,不知薪水涨多少?虽说只是几个AI助手,但…

作者头像 李华