Unity 数据存储PlayerPrefs管理类

2023-12-26 13:44

本文主要是介绍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管理类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539625

相关文章

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=