Unity 持久化存储以及实时数据保存
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 持久化存储以及实时数据保存相关推荐
- Unity持久化存储之PlayerPrefs的使用
unity3d提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值. 一.Playe ...
- php redis存储位置,redis数据保存在哪里
redis的数据是存在内存里吗? 首先要明白redis是一个数据库,redis是一个内存数据库,所有数据基本上都存在于内存当中,会定时以追加或者快照的方式刷新到硬盘中. (推荐学习:Redis视频教程 ...
- 爬虫之scrapy框架的数据持久化存储/保存为scv,json文件
文章目录 前情回顾 selenium+phantomjs/chrome/firefox execjs模块使用 今日笔记 scrapy框架 小试牛刀 猫眼电影案例 知识点汇总 数据持久化存储(MySQL ...
- php调取 zabbix实时数据_Linux运维必知的Zabbix故障排错实战
从0开始解决线上Zabbix监控平台故障 (1)学习Linux技术,后期从事Linux运维方面的工作,作为运维人员最主要的工作职责之一:保障企业门户网站.业务系统.数据库.服务器高效稳定的运行,一旦有 ...
- iOS的四种持久化存储
什么是数据持久化存储? 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据. 什么是沙盒机制? iOS程序默认情况下只能访问程序自己的目录,这个目录被称为&qu ...
- Unity EasySave3中文图文教程详解-万能数据保存插件多平台支持
Chinar blog :www.chinar.xin Unity插件 - EasySave中文详解 本文提供全流程,中文翻译. Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无 ...
- Android教程 -09 数据的持久化存储
视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 任何一个程序其实说白了就是在不停地和数据打交道,数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证及时手机关机的情况下 ...
- Android基础——数据持久化存储
数据持久化存储 文件存储 数据保存 数据读取 键值对存储 数据保存 数据读取 数据库存储 数据库创建 增加数据 更新数据 删除数据 查询数据 使用事物 升级数据库 内容来自于第一行代码中数据持久化存储 ...
- 通达信插件获取并存储通达信商品指数的实时数据
一.引子 通达信商品指数一共有23个,如下图所示: 如果想获取历史数据,只需要通过通达信的数据下载和导出功能即可,现在我们需要获取这23个指数的实时数据,通过导出功能就没有办法了. 在最初的阶段,考虑 ...
最新文章
- oracle正确维护归档,转载:ORACLE正确删除归档日志的方法
- 一次高烧期间的感悟……
- mysql.net开发驱动_mysql数据库.net开发驱动(mysql connector net )
- 单链表实例之学生系统
- JAVA table word,实战 | Java读取Word,包含表格!
- php函数总结,php函数
- Hibernate深入浅出(六)事务2——锁locking
- arduiono电子音乐代码_使用Word2003的EQ域代码制作音乐简谱
- 中国移动开发者大会PPT集萃(一):核心技术与应用开发实践
- python清理数据
- 基于NLP的中医医案文本快速结构化方法
- 国家对五险一金的交纳说明
- 练习绕口令快速提高语言表达能力(收藏)
- 云桌面和PC之间,存在什么差别
- iOS 开发者必不可少的 75 个工具,你都会了吗
- 微信群里的这几类人,真让人想打他
- android studio连接雷电模拟器调试
- excel部分内容有问题xml的修复
- 使用网络唤醒功能实现远程开机 —— 定时执行专家
- Biopython+python 自动化分析蛋白质pdb文件,输出id,序列以及作用位点
热门文章
- matlab pcolor 坐标轴,python pcolor坐标显示类似matlab imagesc效果
- apache 网站转nginx_nginx部署避坑指南+高级配置详解
- 戴尔游匣g15 2022款和华硕天选3选哪个好
- matlab 中medfilt2报错,关于matlab使用medfilt2报错
- 微信小程序开发(九)————文章详情页的实现
- 关于APP热更新,一个降本增效的好方法
- JAVA 两个变量值的交换
- 第四讲—讲解GPIO_Write函数以及相关例程
- adb命令 -- fastboot命令OEM解锁
- 使用vuejs实现简单的图书增加删除功能