当前位置: 首页 > 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.lryc.cn/news/621620.html

相关文章:

  • Python入门第3课:Python中的条件判断与循环语句
  • 戴永红×数图:重构零售空间价值,让陈列创造效益!
  • Vue 侦听器(watch 与 watchEffect)全解析1
  • 从CAD数据访问到3D协作,HOOPS SDK如何提升PLM解决方案竞争力?
  • 机械学习---- PCA 降维深度解析
  • p5.js 3D盒子的基础用法
  • 用 Enigma Virtual Box 将 Qt 程序打包成单 exe
  • Helm 常用命令 + Bitnami 中间件部署速查表
  • 北京JAVA基础面试30天打卡10
  • JVM核心原理与实战优化指南
  • Java 调用 Python 脚本:实现 HelloWorld
  • Android 欧盟网络安全EN18031 要求对应的基本表格填写
  • 电脑上练打字用什么软件最好:10款打字软件评测
  • 【Linux】编辑器vim的使用
  • IDE:vscode的vue3模板
  • STM32 - Embedded IDE - GCC - 解决LWRB库在GCC编译器会编译失败,在ARMCC编译器时却正常编译
  • collections:容器数据类型
  • 《R for Data Science (2e)》免费中文翻译 (第4章) --- Workflow: code style
  • uniapp 开发微信小程序,获取经纬度并且转化详细地址(单独封装版本)
  • 启动electron桌面项目控制台输出中文时乱码解决
  • 解锁AI大模型:Prompt工程全面解析
  • 玻璃pcb是什么材质?哪家工厂可以生产?
  • C++:stl-> list的模拟实现
  • NAT 和 PNAT
  • Oracle按照特定列值排序和C#统计特定列值的所有行
  • 当云手机出现卡顿怎么办?
  • 云手机选哪个比较好用?
  • 手机端的音视频界面或者图片文档界面共享给大屏
  • 实用技巧:Oracle中精准查看表占用空间大小
  • Rust 中 i32 与 *i32 的深度解析