当前位置: 首页 > news >正文

Unity:PlayerPrefs笔记

写在前面:

写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解,方便自己以后快速复习,减少遗忘。

一、PlayerPrefs的基本方法

1、存储相关

PlayerPrefs的数据存储类似于键值对存储,一个键对应一个值。Unity提供了存储3种数据的方法:int、float、string。其中,键一定是string类型。值可以是以上三种类型,对应三种API:PlayerPrefs.SetInt()、PlayerPrefs.SetFloat()、PlayerPrefs.SetString(),里面传入两个参数,键和值

需要注意的是,直接调用Set相关方法,只会把数据存在内存里,当游戏结束时,会自动把数据存到硬盘里。但是如果游戏不是正常结束,而是崩溃,数据是不会存到硬盘中的。如果加上PlayerPrefs.Save(),只要调用该方法,就会马上存储到硬盘中。

不难发现,playerprefs有局限性,它只能存3种类型的数据,如果你想存别的类型的数据,只能降低精度或者上升精度来存储。例如,double需要降精度为float,无符号整型需要转为有符号整型等。存储bool值需要转换,都会在下面的例子中展示。

最后,还需要注意的是:如果用同一键名进行存储,无论是不是同一类型,都会进行覆盖。需要注意自己是否覆盖存储。

public class lession1 : MonoBehaviour
{void Start(){PlayerPrefs.SetInt("myAge", 1);PlayerPrefs.SetFloat("myHeight", 173.5f);PlayerPrefs.SetString("myName", "Alex");PlayerPrefs.Save();//存bool需要转换bool sex = true;PlayerPrefs.SetInt("sex", sex ? 1 : 0);//如果用同一键名进行存储,无论是不是同一类型,都会进行覆盖PlayerPrefs.SetFloat("myAge", 22.2f);}

2、读取相关

读取存储的数据可以使用Unity提供的API,同存储数据一样,Unity也提供了int、float、string三种数据读取方法。分别使用:PlayerPrefs.GetInt()、PlayerPrefs.GetFloat()、PlayerPrefs.GetString() 。只需要传入一个参数,查找的键名。运行时,只要你set了对应键值对,即使没有马上Save存储在本地,也能够读取出信息。

需要注意的是,如果内存中没有,int、float会返回0,string会返回空。例如,我们在上例中将int型的myAge覆盖存储为了float型。这时候如果调用PlayerPrefs.GetInt("myAge"),就会返回0。

如果希望没找到的时候返回一个固定的值,就可以在读取方法中传入第二个参数。第二个参数为默认值,在没有查找到键的时候返回默认值。

此外,还可以使用PlayerPrefs.HasKey("myName")这个方法判断括号内传入的键是否存在。可以用于在存储值前判断,防止覆盖存储。

public class lession1 : MonoBehaviour
{void Start(){PlayerPrefs.SetInt("myAge", 1);PlayerPrefs.SetFloat("myHeight", 173.5f);PlayerPrefs.SetString("myName", "Alex");PlayerPrefs.Save();PlayerPrefs.SetFloat("myAge", 22.2f);int age = PlayerPrefs.GetInt("myAge");print(age);//可以设置默认值,如果找不到会返回默认值age = PlayerPrefs.GetInt("myAge", 100);print(age);//这里由于键存在,不会返回默认值float height = PlayerPrefs.GetFloat("myHeight", 1000f);print(height);string name = PlayerPrefs.GetString("myName");print(name);if(PlayerPrefs.HasKey("myName")){print("存在myName对应的键值对数据");}}

3、删除数据

删除数据有两个API。第一个API是:PlayerPrefs.DeleteKey("myAge"),括号中传入的是需要删除的键值对的键名。第二个API是:PlayerPrefs.DeleteAll(),作用是删除所有键值对

public class lession1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){PlayerPrefs.SetInt("myAge", 1);PlayerPrefs.SetFloat("myHeight", 173.5f);PlayerPrefs.SetString("myName", "Alex");PlayerPrefs.Save();PlayerPrefs.SetFloat("myAge", 22.2f);PlayerPrefs.DeleteKey("myAge");PlayerPrefs.DeleteAll();}

二、PlayerPrefs存储位置

1、存储的数据在哪里

不同平台存储位置不一样,这里介绍Windows、Android、ios。

(1)Windows

PlayerPrefs存储在HKCU\Software\[公司名称]\[产品名称]项下的注册表中,其中公司和产品名称是在“Project Settings”中设置的名称。

首先查看公司和产品名称:File—>Build Settings->Player Settings

然后就可以查看公司名称和产品名称:

找到公司名称和产品名称后,Win+R输入regedit

点击确定后打开注册表编辑器。找到HKEY_CURRENT_USER、Software\Unity\UnityEditor\ 公司名称\产品名称

即可查看并修改存储的信息:

(2)Android

存储在路径:/data/data/包名/shared_prefs/pkg-name.xml

(3)ios

存储在路径:/Library/Preferences/[应用ID].plist

2、PlayerPrefs数据唯一性

PlayerPrefs是中不同数据的唯一性是由key决定的,不同的key决定了不同的数据。需要注意这个唯一性规则。

http://www.dtcms.com/a/332636.html

相关文章:

  • 标准电子邮件地址格式(RFC 5322 里的 mailbox 语法)
  • ABAP : 内表/工作区转JSON
  • Prometheus 监控 Kubernetes Cluster 最新极简教程
  • FreeRTOS多核支持
  • 从根本上解决MAC权限问题(关闭sip)
  • 汽车后雾灯色度难达标?OAS 软件精准解决破瓶颈
  • 图论Day3学习心得
  • Chrome插件开发实战:从架构到发布全流程
  • Docker Compose部署Clickhouse最新版
  • 【软件设计模式】工厂方法与抽象工厂
  • 关于截屏时实现游戏暂停以及本地和上线不同步问题
  • pycharm2025导入anaconda创建的各个AI环境
  • C++第二十课:快递运费计算器 / 黑白配+石头剪刀布小游戏
  • 医院网络安全重保方案
  • 用 KNN 算法解锁分类的奥秘:从电影类型到鸢尾花开
  • 从电影分类到鸢尾花识别:KNN 算法实战指南
  • @[TOC](计算机是如何⼯作的) JavaEE==网站开发
  • MySQL 关键字总结,并结合 SQL 类型(DDL / DML / DQL / DCL / TCL) 说明每类关键字的作用、使用场景和示例
  • 华为实验综合小练习
  • Android RxJava变换操作符详解
  • MuMu模拟器Pro Mac 安卓手机平板模拟器(Mac中文)
  • 9.对象介绍
  • iOS App TF 上架多工具协作实战,一次高效的应用内测分发流程
  • 【数据结构初阶】--排序(三):冒泡排序、快速排序
  • Tomcat部署JDK8项目启动失败:系统化诊断指南
  • 【科研绘图系列】R语言绘制多种饼图
  • OpenCV 阈值处理
  • 基于定制开发开源AI智能名片与S2B2C商城小程序的H5页面小游戏营销模式创新研究
  • 综合案例:Python 函数知识整合 — 学生成绩管理系统
  • fastdds.ignore_local_endpoints 属性