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

Unity 数据存储PlayerPrefs管理类

Unity 数据存储PlayerPrefs管理类

  • Unity 数据存储PlayerPrefs管理类
    • 实现存取实体类对象
    • 存储格式为Json格式
    • Singleton.cs
    • InventoryEntity.cs
    • DataManager.cs
    • 用法如下

Unity 数据存储PlayerPrefs管理类

实现存取实体类对象

存储格式为Json格式

源码如下:

Singleton.cs


//单例模板
public class Singleton<T> where T : new()
{private static T _Instance;public static T Instance{get{if (_Instance == null){_Instance = new T();}return _Instance;}}public Singleton(){}
}

InventoryEntity.cs

/// <summary>
/// 实体类
/// </summary>
public class InventoryEntity {/// <summary>/// 金币/// </summary>public int coins = 0;/// <summary>/// 钻石/// </summary>public int gams = 0;/// <summary>/// 关卡/// </summary>public int Levels = 1;public InventoryEntity(){}public InventoryEntity(int coin, int gam, int level){this.coins = coin;this.gams = gam;this.Levels = level;}
}

DataManager.cs

using UnityEngine;public class DataManager : Singleton<DataManager>
{/// <summary>/// 保存数据/// </summary>InventoryEntity m_Inventory;/// <summary>/// 初始化字典/// </summary>public void Init(){m_Inventory = GetObjectData<InventoryEntity>("data");}#region 人物ID读写/// <summary>/// 记录人物ID/// </summary>private string m_playerId = "";/// <summary>/// 设置人物ID/// </summary>/// <param name="id"></param>public void SetID(string id){m_playerId = id;}/// <summary>/// 获取人物ID/// </summary>/// <returns></returns>public string GetID(){return m_playerId;}#endregion#region 测试该存储#region 修改方法/// <summary>/// 修改金币/// </summary>public void SetCoins(int coin){m_Inventory.coins = coin;SaveObjectDate("data", m_Inventory);}/// <summary>/// 获取金币/// </summary>public int GetCoins(){return m_Inventory.coins;}/// <summary>/// 修改宝石/// </summary>public void SetGams(int gam){m_Inventory.gams = gam;SaveObjectDate("data", m_Inventory);}/// <summary>/// 获取宝石/// </summary>public int GetGams(){return m_Inventory.gams;}/// <summary>/// 修改关卡/// </summary>public void SetLevels(int level){m_Inventory.Levels = level;SaveObjectDate("data", m_Inventory);}/// <summary>/// 获取关卡/// </summary>public int GetLevels(){return m_Inventory.Levels;}/// <summary>/// 修改全部属性/// </summary>public void SetAll(int coin, int gam, int level){m_Inventory.coins = coin;m_Inventory.gams = gam;m_Inventory.Levels = level;SaveObjectDate("data", m_Inventory);}/// <summary>/// 修改全部属性重载/// </summary>public void SetAll(InventoryEntity entity){m_Inventory = entity;SaveObjectDate("data", m_Inventory);}/// <summary>/// 奖励使用逻辑/// </summary>public void SetAward(int awardcoin, int awardgam, int awardlevel){m_Inventory.coins += awardcoin;m_Inventory.gams += awardgam;m_Inventory.Levels += awardlevel;SaveObjectDate("data", m_Inventory);}#endregion#endregion#region 泛型存取数据/// <summary>/// 存储指定类型/// </summary>public void SaveObjectDate<T>(string key, T t, bool common = false){if (common){PlayerPrefs.SetString(key, JsonUtility.ToJson(t));}else{PlayerPrefs.SetString(m_playerId + key, JsonUtility.ToJson(t));}PlayerPrefs.Save();}/// <summary>/// 获取指定类型/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="common"></param>/// <returns></returns>public T GetObjectData<T>(string key, bool common = false) where T : new(){string Data = null;if (common){Data = PlayerPrefs.GetString(key, null);}else{Data = PlayerPrefs.GetString(m_playerId + key, null);}if (string.IsNullOrEmpty(Data)){return new T();}else{return JsonUtility.FromJson<T>(Data);}}#endregion#region 存取数据/// <summary>/// 存储int类型/// </summary>public void SaveIntDate(string key,int num, bool common = false){if (common){PlayerPrefs.SetInt(key,num);}else{PlayerPrefs.SetInt(m_playerId + key, num);}PlayerPrefs.Save();}/// <summary>/// 获取int类型/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="common"></param>/// <returns></returns>public int GetIntData<T>(string key, bool common = false) where T : new(){if (common){return PlayerPrefs.GetInt(key, -1);}else{return PlayerPrefs.GetInt(m_playerId + key, -1);}}/// <summary>/// 存储Float类型/// </summary>public void SaveFloatDate(string key, float num, bool common = false){if (common){PlayerPrefs.SetFloat(key, num);}else{PlayerPrefs.SetFloat(m_playerId + key, num);}PlayerPrefs.Save();}/// <summary>/// 获取Float类型/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="common"></param>/// <returns></returns>public float GetFloatData(string key, bool common = false){if (common){return PlayerPrefs.GetFloat(key, -1);}else{return PlayerPrefs.GetFloat(m_playerId + key, -1);}}/// <summary>/// 存储Bool类型/// </summary>public void SaveBoolDate(string key, bool boolean, bool common = false){if (common){PlayerPrefs.SetInt(key, boolean ? 1 : 0);}else{PlayerPrefs.SetInt(m_playerId + key, boolean ? 1 : 0);}PlayerPrefs.Save();}/// <summary>/// 获取Bool类型/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="common"></param>/// <returns></returns>public bool GetBoolData(string key, bool common = false){int? boolean = null;if (common){boolean = PlayerPrefs.GetInt(key, -1);}else{boolean = PlayerPrefs.GetInt(m_playerId + key, -1);}if (boolean == 1) return true;else return false;}/// <summary>/// 存储Bool类型/// </summary>public void SaveStrDate(string key, string str, bool common = false){if (common){PlayerPrefs.SetString(key, str);}else{PlayerPrefs.SetString(m_playerId + key, str);}PlayerPrefs.Save();}/// <summary>/// 获取Bool类型/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="common"></param>/// <returns></returns>public string GetStrData(string key, bool common = false){if (common){return PlayerPrefs.GetString(key, "");}else{return PlayerPrefs.GetString(m_playerId + key, "");}}#endregion}

用法如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class DataTest : MonoBehaviour {// Use this for initializationvoid Start () {DataManager.Instance.Init();Debug.LogError("金币"+DataManager.Instance.GetCoins());Debug.LogError("宝石"+DataManager.Instance.GetGams());Debug.LogError("关卡" + DataManager.Instance.GetLevels());DataManager.Instance.SetAward(10,20,3);}}

相关文章:

Unity 数据存储PlayerPrefs管理类

Unity 数据存储PlayerPrefs管理类 Unity 数据存储PlayerPrefs管理类实现存取实体类对象存储格式为Json格式Singleton.csInventoryEntity.csDataManager.cs用法如下 Unity 数据存储PlayerPrefs管理类 实现存取实体类对象 存储格式为Json格式 源码如下&#xff1a; Singleton…...

一篇文章学会如何使用 NestJS 过滤器处理系统全局异常情况

前言 在实际的应用开发中&#xff0c;你或许遇到过异常处理机制不统一或错误信息展示混乱的现象。为了解决这些问题&#xff0c;NestJS提供了一个优雅的解决方案&#xff1a;过滤器&#xff08;Filter&#xff09;。本文将从实际出发&#xff0c;向你介绍NestJS过滤器的基本概…...

ubuntu 守护进程 supervisor

# 安装 apt-get install supervisor# 检查 echo_supervisord_conf# 查看配置文件所在位置 # [include] # files /etc/supervisor/conf.d/*.conf ps -ef | grep supervisorcd /etc/supervisor/conf.d/lscat frp.conf[program:frp] command /data/work/frp/frpc -c /data/work/…...

SparkStreaming_window_sparksql_reids

1.5 window 滚动窗口滑动窗口 window操作就是窗口函数。Spark Streaming提供了滑动窗口操作的支持&#xff0c;从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据&#xff0c;会被聚合起来执行计算操作&#xff0c;然后生成的RDD&#xff0c;会…...

爬虫工作量由小到大的思维转变---<第二十四章 Scrapy的`统计数据`收集stats collection ---12月26日补>

前言: 前两篇是讲的数据诊断分析,还有一篇深挖解决内存泄漏的文章,目前我还没整理汇编出来;但是,想到分析问题的时候,忽然觉得爬虫的数据统计好像也挺重要;于是,心血来潮准备来插一篇这个------让大家对日常scrapy爬的数据,做到心里有数!不必自己去搅破脑汁捣腾日志,敲计算器了…...

Kafka:本地设置

这是设置 Kafka 将数据从 Elasticsearch 发布到 Kafka 主题的三部分系列的第一部分;该主题将被 Neo4j 使用。第一部分帮助您在本地设置 Kafka。第二部分将讨论如何设置Elasticsearch将数据发布到Kafka主题。最后 将详细介绍如何使用连接器订阅主题并使用数据。 Kafka Kafka 是…...

.NetCore NPOI 读取excel内容及单元格内图片

由于数据方提供的数据在excel文件中不止有文字内容还包含图片信息&#xff0c;于是编写相关测试代码&#xff0c;读取excel文件内容及图片信息. 本文使用的是 NPOI-2.6.2 版本&#xff0c;此版本持.Net4.7.2;.NetStandard2.0;.NetStandard2.1;.Net6.0。 测试文档内容&#xf…...

TCP/UDP协议

1. 请解释TCP和UDP的主要区别。 TCP和UDP都是位于传输层的协议&#xff0c;具有不同的特点和应用场景。以下是它们的主要区别&#xff1a; 连接方式&#xff1a;TCP是面向连接的协议&#xff0c;这意味着在数据传输之前需要先建立连接。这通常通过三次握手来建立连接&#xff…...

3D 渲染如何帮助电商促进销售?

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 3D 渲染图像因其高转化率而成为亚马逊卖家的最新趋势。它是电子商务平…...

使用栈求表达式的值【数据结构】

中缀表达式转后缀表达式 转换流程&#xff1a; 初始化一个运算符栈。自左向右扫描中缀表达式&#xff0c;当扫描到操作数时直接连接到后缀表达式上。当扫描到操作符时&#xff0c;和运算符栈栈顶的操作符进行比较。如果比栈顶运算符高&#xff0c;则入栈。如果比栈顶运算符低…...

{MySQL}索引事务和JDBC

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次&#xff0c;继续讲下MySQL 提示&#xff1a;以下是本篇文章正…...

Qt designer界面和所有组件功能的详细介绍(全!!!)

PyQt5和Qt designer的详细安装教程&#xff1a;https://blog.csdn.net/qq_43811536/article/details/135185233?spm1001.2014.3001.5501 目录 1. 界面介绍2. Widget Box 常用组件2.1 Layouts&#xff08;布局&#xff09;2.2 Spacers&#xff08;间隔器&#xff09;2.3 Item V…...

mysql_存储过程

举例子 createdefiner root% procedure insert_batch_test(IN START int(10), IN max_num int(10)) BEGINDECLAREi INT DEFAULT 0;SET autocommit 0;REPEATSET i i 1;INSERT INTO test (std, score)VALUES (CEILING(RAND() * 10 100), CEILING(RAND() * 50 50));UNTIL i …...

uboot学习及内核更换_incomplete

官方文档 在前面 文章目录 uboot常见命令学习环境变量网络控制台uboot标准启动其他 升级uboot或内核bin和uimg以及booti和bootm的区别制作uImage更换内核更换uboot后续计划 uboot常见命令学习 环境变量 Environment Variables环境变量 autostart 如果值为yes&#xff0c;则会…...

KVM 自动化脚本的使用及热/冷迁移

一、介绍 目录结构介绍 [rootkvm-server kvm]# tree -L 2 . ├── control # 控制脚本目录 │ ├── KVMInstall.sh # kvm服务安装脚本 │ ├── VMHost.sh # kvm虚拟机克隆脚本 │ └── VMTemplate.sh # kvm模板机安装脚本 ├── mount # 此目录保持为空&…...

Unity中Shader裁剪空间推导(在Shader中使用)

文章目录 前言一、在Shader中使用转化矩阵1、在顶点着色器中定义转化矩阵2、用 UNITY_NEAR_CLIP_VALUE 区分平台矩阵3、定义一个枚举用于区分当前是处于什么相机 二、我们在DirectX平台下&#xff0c;看看效果1、正交相机下2、透视相机下3、最终代码 前言 在上一篇文章中&…...

ES的使用(Elasticsearch)

ES的使用&#xff08;Elasticsearch&#xff09; es是什么&#xff1f; es是非关系型数据库&#xff0c;是分布式文档数据库&#xff0c;本质上是一个JSON 文本 为什么要用es? 搜索速度快&#xff0c;近乎是实时的存储、检索数据 怎么使用es? 1.下载es的包&#xff08;环境要…...

车牌识别技术,如何用python识别车牌号

目录 一.前言 二.运行环境 三.代码 四.识别效果 五.参考 一.前言 车牌识别技术&#xff08;License Plate Recognition, LPR&#xff09;在交通计算机视觉&#xff08;Computer Vision, CV&#xff09;领域具有非常重要的研究意义。以下是该技术的一些扩展说明&#xff1…...

爬虫工作量由小到大的思维转变---<第二十五章 Scrapy开始很快,越来越慢(追溯篇)>

爬虫工作量由小到大的思维转变---&#xff1c;第二十二章 Scrapy开始很快,越来越慢(诊断篇)&#xff1e;-CSDN博客 爬虫工作量由小到大的思维转变---&#xff1c;第二十三章 Scrapy开始很快,越来越慢(医病篇)&#xff1e;-CSDN博客 前言: 之前提到过,很多scrapy写出来之后,不…...

Servlet入门

目录 1.Servlet介绍 1.1什么是Servlet 1.2Servlet的使用方法 1.3Servlet接口的继承结构 2.Servlet快速入门 2.1创建javaweb项目 2.1.1创建maven工程 2.1.2添加webapp目录 2.2添加依赖 2.3创建servlet实例 2.4配置servlet 2.5设置打包方式 2.6部署web项目 3.servl…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...