Unity 持久化存储以及实时数据保存

  • 数据存储
  • 数据持久化
  • 示例工程下载
  • 代码搭载
  • 最终运行运行

代码很简单没有难度,都有注解,随便 康一康 就会了。

数据存储

使用 ScriptableObject 类来再Unity编辑器情况下进行基础数据存储
注意:ScriptableObject 只能在Unity编辑器条件下进行动态存储 打包之后是无法进行数据保存的也就是说打包之后 ScriptableObject 文件只具有可读性
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 数据存储
/// </summary>
[SerializeField]
[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/New Item")]
public class DataStorage_ZH : ScriptableObject
{public int _Int;public string _String;public float _Float;
}

数据持久化

DataPersistence_ZH 类 使用 PlayerPrefs里面的方法为主体进行编辑的KeyTypeStrAdd 枚举类可以根据 具体内容进行自定义填充
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;/// <summary>
/// 数据持久化存储
/// </summary>
public class DataPersistence_ZH : MonoBehaviour
{[Header("数据")]public DataStorage_ZH _DataStorage;[Header("String 数据")]public InputField _TextStr;[Header("Float 数据")]public InputField _TextFloat;[Header("Int 数据")]public InputField _TextInt;//单例public static DataPersistence_ZH _DataPersistence;private void Awake(){_DataPersistence = this;}void Update(){//存储if (Input.GetKeyDown(KeyCode.Q)){//Key值 加类型(名字/ 生长习性)StorageData(_DataStorage._String + nameof(_DataStorage._String), _TextStr.text,KeyTypeStrAdd._String);//StorageData(_DataStorage._String +"标题", "Name");StorageData(_DataStorage._String + nameof(_DataStorage._Float), _TextFloat.text,KeyTypeStrAdd._Float);StorageData(_DataStorage._String + nameof(_DataStorage._Int), _TextInt.text,KeyTypeStrAdd._Int);}//查询if (Input.GetKeyDown(KeyCode.E)){ //名字查询StartCoroutine(InquireData(_DataStorage._String, nameof(_DataStorage._String)));//StartCoroutine(InquireData(_DataStorage._String, "标题"));StartCoroutine(InquireData(_DataStorage._String, nameof(_DataStorage._Float)));StartCoroutine(InquireData(_DataStorage._String, nameof(_DataStorage._Int)));}}/// <summary>/// 数据删除单个/// </summary>public void DeleteKeyData(string _DeleteKey){//从首选项中删除键及其相应的值PlayerPrefs.DeleteKey(_DeleteKey);}/// <summary>/// 数据删除所有/// </summary>public void DeleteKeyData(){//从首选项中删除所有键和值 谨慎使用PlayerPrefs.DeleteAll();}#region 数据存储/// <summary>/// 数据存储  string/// </summary>/// <param 储存 Key 值="_DataKey"></param>/// <param 存储 Value 值="_DataValue"></param>public void StorageData(string _DataKey, string _DataValue){//设置由键标识的首选项的值  数据存储在磁盘PlayerPrefs.SetString(_DataKey, _DataValue);//数据存储在文件_DataStorage._String = _DataValue;//将所有修改的首选项写入磁盘PlayerPrefs.Save();}/// <summary>/// 数据存储  float/// </summary>/// <param 储存 Key 值="_DataKey"></param>/// <param 存储 Value 值="_DataValue"></param>public void StorageData(string _DataKey, float _DataValue){//设置由键标识的首选项的值  数据存储在磁盘PlayerPrefs.SetFloat(_DataKey, _DataValue);//数据存储在文件_DataStorage._Float = _DataValue;//将所有修改的首选项写入磁盘PlayerPrefs.Save();}/// <summary>/// 数据存储  int/// </summary>/// <param 储存 Key 值="_DataKey"></param>/// <param 存储 Value 值="_DataValue"></param>public void StorageData(string _DataKey, int _DataValue){//设置由键标识的首选项的值  数据存储在磁盘PlayerPrefs.SetInt(_DataKey, _DataValue);//数据存储在文件_DataStorage._Int = _DataValue;//将所有修改的首选项写入磁盘PlayerPrefs.Save();}/// <summary>/// 数据查询带类型/// </summary>/// <param 储存 Key 值="_DataKey"></param>/// <param 存储 Value 值="_DataValue"></param>/// <param 变量="_KeyType"></param>public void StorageData(string _DataKey, string _DataValue, KeyTypeStrAdd _KeyType){switch (_KeyType){case KeyTypeStrAdd._String://设置由键标识的首选项的值  数据存储在磁盘PlayerPrefs.SetString(_DataKey, _DataValue);//数据存储在文件//_DataStorage._String = _DataValue;// 数据存储在文件_DataStorage.GetType().GetField(_KeyType.ToString()).SetValue(_DataStorage, _KeyType.ToString());//将所有修改的首选项写入磁盘PlayerPrefs.Save();break;case KeyTypeStrAdd._Float://设置由键标识的首选项的值  数据存储在磁盘PlayerPrefs.SetFloat(_DataKey, float.Parse(_DataValue));数据存储在文件//_DataStorage._Float = float.Parse(_DataValue);//数据存储在文件_DataStorage.GetType().GetField(_KeyType.ToString()).SetValue(_DataStorage, float.Parse(_DataValue));//将所有修改的首选项写入磁盘PlayerPrefs.Save();break;case KeyTypeStrAdd._Int://设置由键标识的首选项的值  数据存储在磁盘PlayerPrefs.SetInt(_DataKey, (int)float.Parse(_DataValue));数据存储在文件//_DataStorage._Int = (int)float.Parse(_DataValue);// 数据存储在文件_DataStorage.GetType().GetField(_KeyType.ToString()).SetValue(_DataStorage, (int)float.Parse(_DataValue));//将所有修改的首选项写入磁盘PlayerPrefs.Save();break;default:break;}}#endregion/// <summary>/// 数据查询/// 添加新数据/// </summary>/// <param 数据查询 Key 值="_DataKey"></param>/// <param 查询 Kry 值添加的字符="_StrKeyAdd"></param>/// <returns></returns>public IEnumerator InquireData(string _DataKey,string _StrKeyType){//缓存值string _InquireDataStr;//Floatfloat _InquireDataFloat;//Intint _InquireDataInt;if (_DataKey != null){//类型判断switch (_StrKeyType){//如果是 String 类型case "_String"://如果存在 返回首选项文件中key对应的值  _InquireDataStr = PlayerPrefs.GetString(_DataKey + _StrKeyType);//数据返回//_DataStorage.GetType().GetField(_StrKeyType).GetValue(_DataStorage);_TextStr.text = _InquireDataStr;yield return 0; break;//如果是 Float 类型case "_Float"://如果存在 返回首选项文件中key对应的值_InquireDataFloat = PlayerPrefs.GetFloat(_DataKey + _StrKeyType);数据返回//_DataStorage.GetType().GetField(_StrKeyType).GetValue(_DataStorage);_TextFloat.text = _InquireDataFloat.ToString();yield return 0;break;//如果是 Int 类型case "_Int"://如果存在 返回首选项文件中key对应的值_InquireDataInt = PlayerPrefs.GetInt(_DataKey + _StrKeyType);数据返回//_DataStorage.GetType().GetField(_StrKeyType).SetValue(_DataStorage, _InquireDataInt);_TextInt.text = _InquireDataInt.ToString();yield return 0;break;default:break;}}}/// <summary>/// 枚举类型添加/// </summary>public enum KeyTypeStrAdd{ _String,_Float,_Int,}
}

示例工程下载

Unity 持久化存储示例场景: 下载链接.

代码搭载

最终运行运行

暂时先这样吧,如果有时间的话就会更新,实在看不明白就留言,看到我会回复的。
路漫漫其修远兮,与君共勉。

Unity 持久化存储以及实时数据保存相关推荐

  1. Unity持久化存储之PlayerPrefs的使用

    unity3d提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值.     一.Playe ...

  2. php redis存储位置,redis数据保存在哪里

    redis的数据是存在内存里吗? 首先要明白redis是一个数据库,redis是一个内存数据库,所有数据基本上都存在于内存当中,会定时以追加或者快照的方式刷新到硬盘中. (推荐学习:Redis视频教程 ...

  3. 爬虫之scrapy框架的数据持久化存储/保存为scv,json文件

    文章目录 前情回顾 selenium+phantomjs/chrome/firefox execjs模块使用 今日笔记 scrapy框架 小试牛刀 猫眼电影案例 知识点汇总 数据持久化存储(MySQL ...

  4. php调取 zabbix实时数据_Linux运维必知的Zabbix故障排错实战

    从0开始解决线上Zabbix监控平台故障 (1)学习Linux技术,后期从事Linux运维方面的工作,作为运维人员最主要的工作职责之一:保障企业门户网站.业务系统.数据库.服务器高效稳定的运行,一旦有 ...

  5. iOS的四种持久化存储

    什么是数据持久化存储? 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据. 什么是沙盒机制? iOS程序默认情况下只能访问程序自己的目录,这个目录被称为&qu ...

  6. Unity EasySave3中文图文教程详解-万能数据保存插件多平台支持

    Chinar blog :www.chinar.xin Unity插件 - EasySave中文详解 本文提供全流程,中文翻译. Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无 ...

  7. Android教程 -09 数据的持久化存储

    视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 任何一个程序其实说白了就是在不停地和数据打交道,数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证及时手机关机的情况下 ...

  8. Android基础——数据持久化存储

    数据持久化存储 文件存储 数据保存 数据读取 键值对存储 数据保存 数据读取 数据库存储 数据库创建 增加数据 更新数据 删除数据 查询数据 使用事物 升级数据库 内容来自于第一行代码中数据持久化存储 ...

  9. 通达信插件获取并存储通达信商品指数的实时数据

    一.引子 通达信商品指数一共有23个,如下图所示: 如果想获取历史数据,只需要通过通达信的数据下载和导出功能即可,现在我们需要获取这23个指数的实时数据,通过导出功能就没有办法了. 在最初的阶段,考虑 ...

最新文章

  1. oracle正确维护归档,转载:ORACLE正确删除归档日志的方法
  2. 一次高烧期间的感悟……
  3. mysql.net开发驱动_mysql数据库.net开发驱动(mysql connector net )
  4. 单链表实例之学生系统
  5. JAVA table word,实战 | Java读取Word,包含表格!
  6. php函数总结,php函数
  7. Hibernate深入浅出(六)事务2——锁locking
  8. arduiono电子音乐代码_使用Word2003的EQ域代码制作音乐简谱
  9. 中国移动开发者大会PPT集萃(一):核心技术与应用开发实践
  10. python清理数据
  11. 基于NLP的中医医案文本快速结构化方法
  12. 国家对五险一金的交纳说明
  13. 练习绕口令快速提高语言表达能力(收藏)
  14. 云桌面和PC之间,存在什么差别
  15. iOS 开发者必不可少的 75 个工具,你都会了吗
  16. 微信群里的这几类人,真让人想打他
  17. android studio连接雷电模拟器调试
  18. excel部分内容有问题xml的修复
  19. 使用网络唤醒功能实现远程开机 —— 定时执行专家
  20. Biopython+python 自动化分析蛋白质pdb文件,输出id,序列以及作用位点

热门文章

  1. matlab pcolor 坐标轴,python pcolor坐标显示类似matlab imagesc效果
  2. apache 网站转nginx_nginx部署避坑指南+高级配置详解
  3. 戴尔游匣g15 2022款和华硕天选3选哪个好
  4. matlab 中medfilt2报错,关于matlab使用medfilt2报错
  5. 微信小程序开发(九)————文章详情页的实现
  6. 关于APP热更新,一个降本增效的好方法
  7. JAVA 两个变量值的交换
  8. 第四讲—讲解GPIO_Write函数以及相关例程
  9. adb命令 -- fastboot命令OEM解锁
  10. 使用vuejs实现简单的图书增加删除功能