当前位置: 首页 > 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);}}
http://www.lryc.cn/news/270000.html

相关文章:

  • 一篇文章学会如何使用 NestJS 过滤器处理系统全局异常情况
  • ubuntu 守护进程 supervisor
  • SparkStreaming_window_sparksql_reids
  • 爬虫工作量由小到大的思维转变---<第二十四章 Scrapy的`统计数据`收集stats collection ---12月26日补>
  • Kafka:本地设置
  • .NetCore NPOI 读取excel内容及单元格内图片
  • TCP/UDP协议
  • 3D 渲染如何帮助电商促进销售?
  • 使用栈求表达式的值【数据结构】
  • {MySQL}索引事务和JDBC
  • Qt designer界面和所有组件功能的详细介绍(全!!!)
  • mysql_存储过程
  • uboot学习及内核更换_incomplete
  • KVM 自动化脚本的使用及热/冷迁移
  • Unity中Shader裁剪空间推导(在Shader中使用)
  • ES的使用(Elasticsearch)
  • 车牌识别技术,如何用python识别车牌号
  • 爬虫工作量由小到大的思维转变---<第二十五章 Scrapy开始很快,越来越慢(追溯篇)>
  • Servlet入门
  • 【C#与Redis】--高级主题--Redis 哨兵
  • linux安装python
  • 【如何破坏单例模式(详解)】
  • 什么是 SPI,它有什么用?
  • FolkMQ 新的消息中间件,v1.0.25
  • 小程序入门-登录+首页
  • React快速入门之组件
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • Hadoop入门学习笔记——六、连接到Hive
  • 【K8S 基本概念】Kurbernetes的架构和核心概念
  • WPS复选框里打对号,显示小太阳或粗黑圆圈的问题解决方法