Unity数据持久化-PlayerPrefs

news2024/11/15 11:30:03

1. PlayerPrefs 是什么?

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

1.1. 存储相关

PlayerPrefs的数据存储类似于键值对存储 一个键对应一个值
提供了存储3种数据的方法int float string
键:string类型
值: int float string对应3种API

        PlayerPrefs.SetInt("myAge", 0);
        PlayerPrefs.SetFloat("myMoney", 1999f);
        PlayerPrefs.SetString("myName", "122&&113");

直接调用set相关方法只会把数据存到内存里
当游戏结束时unity会自动把数据存到硬盘中
如果游戏不是正常结束的而是崩溃数据是不会存到硬盘中的

只要调用该方法就会马上存储到硬盘中

        PlayerPrefs.Save();

PlayerPrefs是有局限性的它只能存3种类型的数据
如果你想要存储别的类型的数据只能降低精度或者上升精度来进行存储

		bool sex = true;
        PlayerPrefs.SetInt("sex", sex ? 1 : 0);

如果不同类型用同一键名进行存储会进行覆盖

       PlayerPrefs.SetFloat( "myAge", 20.2f);

1.2. 读取相关

注意运行时只要你set了对应键值对
即使你没有马上存储save在本地
也能够读取出信息

        // int
        int age = PlayerPrefs.GetInt("myAge");
        print(age);
        // 前提是如果找不到myAge对应的值就会返回函数的第二个参数默认值
        age = PlayerPrefs.GetInt("myAge", 20);
        Debug.Log(age);
        // float
        float money = PlayerPrefs.GetFloat("myMoney");
        print(money);

        // string
        string name = PlayerPrefs.GetString("myName");
        print(name);

        // 判断数据是否存在
        if (PlayerPrefs.HasKey("myName"))
        {
            print("Exist");
        }

1.3. 删除数据

       // 删除指定键值对
       PlayerPrefs.DeleteKey("myName");
       // 删除所有
       PlayerPrefs.DeleteAll();

2. 存储?

2.1. PlayerPrefs存储的数据存在哪里?

不同平台存储位置不一样


Windows:
PlayerPrefs 存储在 HKCU\Software[公司名称]\产品名称] 项下的注册表中
其中公司和产品名称是在 “Project settings” 中设置的名称。
查找步骤:运行 regedit → \to HKEY_CURRENT_USER → \to SOFTWARE → \to Unity → \to UnityEditor → \to 公司名称 → \to 产品名称


Android:

/data/data/包名/shared_prefs/pkg-name.xml


IOS

/Library/Preferences/[应用ID].plist


查找公司名称和产品名称:

查找公司名称和产品名称

3. 自定义存储

存储对象,通过以下脚本可以直接实现。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tools_Save_Data
{
    private static Tools_Save_Data tools_save_data = null;

    public static Tools_Save_Data GetInstance()
    {
        if (tools_save_data == null)
        {
            tools_save_data=new Tools_Save_Data();
        }
        return tools_save_data;
    }

    /// <summary>
    /// 存储单个对象
    /// </summary>
    /// <param name="instance">继承于object的对象</param>
    /// <param name="key">键值</param>
    /// <param name="save2disk">是否将其存储到磁盘空间上</param>
    public void SaveInstance(object instance, string key, bool save2disk = false)
    {
        // Step1 : convert data to json type.
        var jasonData = JsonUtility.ToJson(instance);
        // Step2 : use PlayerPrefs save.
        if (PlayerPrefs.HasKey(key))
        {
            Debug.LogWarning($"{key}'s value will be override!");
        }
        PlayerPrefs.SetString(key, jasonData);
        if (save2disk) PlayerPrefs.Save();
    }

    /// <summary>
    /// 读取单个对象到内存中
    /// </summary>
    /// <param name="data"></param>
    /// <param name="key"></param>
    /// <returns></returns>
    public bool LoadInstance<T>(out T data, string key)
    {
        if (PlayerPrefs.HasKey(key))
        { 
            data = JsonUtility.FromJson<T>(PlayerPrefs.GetString(key));
            return true;
        }
        else
        {
            Debug.LogWarning($"{key} is not exists!");
            data = default(T);
            return false;
        }
    }

    /// <summary>
    /// 删除指定对象
    /// </summary>
    /// <param name="key"></param>
    public void DeleteInstance(string key)
    {
        PlayerPrefs.DeleteKey(key);
    }

    /// <summary>
    /// 删除所有记录
    /// </summary>
    public void DeleteAll()
    {
        PlayerPrefs.DeleteAll();
    }

}

参考资料:
unity3d-实现本地数据的储存(PlayerPrefs&JsonUtility)
【唐老狮】Unity数据持久化之PlayerPrefs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将宿主机工作文件夹映射到vmware虚拟机内

将宿主机工作文件夹映射到vmware虚拟机内vmware启用共享文件夹在虚拟机中使用vmtools进行挂载虚拟机为linux系统&#xff0c;操作中使用的是凝思系统 vmware启用共享文件夹 在vmware中将需要共享的工作文件夹添加到共享列表中&#xff0c;如图 在虚拟机中使用vmtools进行挂…

Tomcat部署项目及Tomcat间会话同步

目录一、Tomcat中部署项目的相关配置1.相关配置2.测试二、Tomcat间的会话同步1.配置Tomcat2.修改web工程的WEB-INF下的web.xml3.配置Nginx4.测试一、Tomcat中部署项目的相关配置 1.相关配置 在Tomcat中进入conf/tomcat-users.xml文件&#xff0c;将以下代码放到最后 <rol…

本地Exchange备份方案

Exchange Server的Windows服务器备份只能执行基础还原&#xff0c;并且不支持对邮箱项执行粒度还原。在需要恢复单个已删除的电子邮件或文件夹的情况下&#xff0c;本机解决方案提供了一个耗时且低效的过程。Exchange ServerRecoveryManager Plus帮助您克服这些限制。使用Recov…

国内有哪些移动开发平台?各有什么特点

开年找解决方案的时候接触了一批移动开发平台&#xff0c;猛然发现近几年移动开发平台如雨后春笋般出现&#xff0c;于是乎就想针对市场上越来越多的移动开发平台做一次盘点对比&#xff0c;看看他们的基本情况和自身特点优势&#xff0c;也希望能够对有需要的开发者有一定的参…

Docker - 4. 容器常用命令 docker run、exit、ps、rm、start、stop、kill

目录 1. 新建容器并启动 2. 从容器中退回主机 3. 列出所有运行的容器 4. 退出容器 5. 删除容器 6. 启动和停止容器 7. 易混淆地方 1. 新建容器并启动 语法&#xff1a;docker run [可选参数] 镜像名 参数&#xff1a; 参数含义--name "Name" 容器名字&a…

java泛型1

泛型&#xff08;为了集合&#xff09; Java 5增加泛型支持在很大程度上都是为了让集合能记住其元素的数据类型。在没有泛型之前&#xff0c;一旦把一个对象“丢进”Java集合中&#xff0c;集合就会忘记对象的类型&#xff0c;把所有的对象当成Object类型处理。当程序从集合中取…

基于深度学习框架设计的货运管家(功能总结)

项目背景&#xff1a; 在快递行业发达的今天&#xff0c;有数不胜数的货运公司、快递公司&#xff0c;这些公司都有自己的运输车辆&#xff0c;请师傅开车送货。 比如&#xff1a;快递公司、烟草运输公司、货物运输公司等等。 为了能方便管理货车&#xff0c;了解车辆行驶路线…

49.Isaac教程--Cartographer

Cartographer ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Cartographer数据要求配置启动 Cartographer 示例应用程序监控和可视化输出Cartographer 是 Google 的一个&#xff08;同步定位和映射&#xff09;SLAM 系统&#xff0c;能够…

2023最新前端面试题5(持续更新)

Vue 74、vue 生命周期 74.1、什么是 Vue 生命周期? Vue 实例从创建到销毁的过程&#xff0c;就是生命周期。也就是从开始创建、初始化数据编译模板、挂载 Dom一渲染、更新一渲染、卸载等一系列过程&#xff0c;我们称这是 Vue的生命周期 74.2、Vue 生命周期的作用是什么?…

函数递归+青蛙跳台阶——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容终于要回到我们的C语言了&#xff0c;在之前&#xff0c;我写函数这篇博客的时候就讲过&#xff0c;会把函数递归的内容单独拿出来&#xff0c;然后呢当时是说下一篇博客就会更函数递归和青蛙跳台阶&#xff0c;由于一系列原…

拼多多控价,低价投诉,不被支持怎么办

治理电商平台上的低价乱价链接&#xff0c;首选方法是沟通调整&#xff0c;成本低、见效快。针对沟通调整不成功的&#xff0c;再进行平台投诉&#xff0c;通过电商平台的力量对其进行约束。 但是&#xff0c;平台投诉一定要注意一点&#xff1a;不要以低价为理由&#xff01;…

原命题和逆否命题

看Boyd的凸优化看到这样一个证明&#xff1a; 从左到右的证明是 使用了一个逆否命题的方法进行证明&#xff0c;有点忘记了原命题和逆否命题之间的相互转换&#xff0c;记录一下。 简单形式命题 简单形式命题没有全称量词∀\forall∀和存在两次∃\exists∃&#xff0c;也没有…

字符流、字节流、缓冲流、序列化流

1.文件拷贝的基本代码 2.一次读取多个字节 3.异常处理 但是上述的释放过程太繁琐&#xff0c;于是便用AutoCloseable接口简化释放过程 JDK7: JDK9: 4.各种字词计算机存储规则 所以底层二进制文件就是根据正负来区别英文和中文的。 5.乱码 6.字符流 7.字符输入流和输出流底层原理…

ASEMI桥式整流电路KBP206特性参数的计算

编辑-Z 什么是桥式整流电路&#xff1f; 桥式整流电路由四个二极管以闭环“桥式”配置连接&#xff0c;以产生所需的输出。这种桥式电路的主要优点是不需要特殊的中央抽头变压器&#xff0c;从而减小了尺寸和成本。单个次级绕组连接到二极管桥网络的一侧&#xff0c;负载连接到…

【正点原子FPGA连载】第二十一章根文件系统构建 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十一章根文件…

ch3_1系统总线的概念

1. 总线的基本概念 总线概念&#xff1a; 是连接各个部件的信息传输线&#xff0c;是各个部件共享的传输介质&#xff1b; 1.1 为何需要总线 总线结构便于增减 外设&#xff0c; 同时 减少了信息传输线的条数。 总线是信号的公共传输线&#xff0c; 1.2 总线上信息的传送 …

深入理解堆与优先队列

目录一、什么是堆&#xff1f;二、堆的实现2.1 上滤与下滤2.2 堆的常用操作2.3 建堆三、堆排序四、优先队列References一、什么是堆&#xff1f; 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树&#xff0c;满足性质&#xff1a;除叶节点外每个节点的值都大于等于&…

【Window 入侵排查】

Window 入侵排查1、文件的排查1.1 开机启动有无异常文件启动1.2 对系统敏感文件路径的查看1.3 查看Recent1.4 查看文件时间1.5 webshell 文件排查2、进程、端口排查2.1 查看进程2.2 进程排查2.3 使用powershell 进行查询2.4 使用WMIC 命令进行排查3、检查启动项、计划任务、服务…

全志V85X系列芯片PCB设计需要注意些什么?

全志V85X &#xff08;包括V853、V853S、V851S、V851SE等&#xff09;是一颗面向智能视觉领域推出的新一代高性能、低功耗的处理器SOC&#xff0c;可广泛用于智能门锁、智能考勤门禁、网络摄像头、行车记录仪、智能台灯等智能化升级相关行业。V85X 集成ARM Cortex-A7和RISC-V E…

一个跨平台执行外部命令的C#开源库

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 对于我们程序员来说&#xff0c;在日常开发项目中&#xff0c;调用外部的命令是非常常见的&#xff0c;比如调用批处理命令、调用其他应用&#xff0c;这里面就涉及到进程的通讯、管理、启动、取消等一些操作&am…