Unity的数据本地储存的集中方法
一)
PlayerPrefab
使用的是Unity自带的PlayerPrefab这个类 但是这个类只能保存 Int float string 三种类型
注:其本质为在本地文件写入一个XML文件
PlayerPrefs数据存储在哪里?
1.在Mac OS X上存储在~/Library/PlayerPrefs文件夹,名为unity.[company name].[product name].plist,这里company和product名是在project Setting中设置的
2.在windows下,playerPrefs被存储在注册的HKCU\Software[company name][product name]键下,这里company和product名是在project setting中设置的。
3.在Android上,数据存储(持久化)在设备上。数据保存在SharedPreferences中。
PlayerPrefs有哪些方法?
分为五类:SetXXX , GetXXX , DeleteXXX, HasKey , Save.
1.SetXXX : 是你要储存的数据类型,这里必须是一组键值对,第一个参数是Key,第二个参数是对应的Value。
2.GetXXX:这里是获取数据的函数,只有一个参数Key,用来获取对应Key的Value.
3.HasKey: 这个可以用来做判断。比如有两组数据一组有XX这个Key,另一组没有XX这个Key,这个时候我们就可以对这两组数据进行差异化操作。
4.DeleteXX:用于删除数据。
5.Save:用于在突发退出程序时,保存数据以备恢复时使用,但是会导致程序间断所以不建议调用。
官方地址:https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
二)XML实现
用.net 控制台实现的(Unity和这一样)
命名空间
using System.Xml;
using System.IO;
1)创建XML
XML的学习:https://www.runoob.com/xml/xml-tutorial.html
.net/C#文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.xml?view=netcore-3.1
public static void createXML()
{
//新建XmlDocument对象
XmlDocument doc = new XmlDocument();
//根节点
XmlElement root = doc.CreateElement(“player”);
//playerID节点
XmlElement playerID = doc.CreateElement(“player01”);
//name
XmlElement name = doc.CreateElement(“name”);
name.InnerText = “TOM”;
//age
XmlElement age = doc.CreateElement(“age”);
age.InnerText = “12”;
//strenth
XmlElement strenth = doc.CreateElement(“strenth”);
strenth.InnerText = “100”;
//speed
XmlElement speed = doc.CreateElement(“speed”);
speed.InnerText = “10”;
playerID.AppendChild(name);
playerID.AppendChild(age);
playerID.AppendChild(strenth);
playerID.AppendChild(speed);
root.AppendChild(playerID);
doc.AppendChild(root);
doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
//Console.WriteLine(“success”);
}
实现结果如下
2)添加XML
public static void AddXML()
{
//新建XmlDocument对象
XmlDocument doc = new XmlDocument();
//载入文件
try
{
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
}
catch (System.Xml.XmlException)
{
throw new Exception(“load fail”);
}
//查找要插入数据的节点
XmlNode newxmlnode = doc.SelectSingleNode(“player”);
//创建新的节点
XmlElement newplayerID = doc.CreateElement(“player02”);
XmlElement name = doc.CreateElement(“name”);
name.InnerText = “jerry”;
//age
XmlElement age = doc.CreateElement(“age”);
age.InnerText = “14”;
//strenth
XmlElement strenth = doc.CreateElement(“strenth”);
strenth.InnerText = “105”;
//speed
XmlElement speed = doc.CreateElement(“speed”);
speed.InnerText = “15”;
newplayerID.AppendChild(name);
newplayerID.AppendChild(age);
newplayerID.AppendChild(strenth);
newplayerID.AppendChild(speed);
newxmlnode.AppendChild(newplayerID);
doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
Console.WriteLine(“add success”);
}
结果如下:
3)数据的更新
比如把player02节点下的speed更改为10
public static void UpdateXML()
{
XmlDocument doc = new XmlDocument();
//载入文件
try
{
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
}
catch (System.Xml.XmlException)
{
throw new Exception(“load fail”);
}
XmlNode player = doc.SelectSingleNode(“player”);
XmlNodeList charactors = player.ChildNodes;
foreach (XmlElement charactor in charactors)
{
if (charactor.Name.Equals(“player02”))
{
XmlNode son = charactor.SelectSingleNode(“speed”);
son.InnerText = “10”;
Console.WriteLine(“update success”);
}
}
//写入文档
doc.Save(@“C:/Users/Administrator/Desktop/student.xml”);
}
结果如下
4)数据的读取
static void ReadXML()
{
XmlDocument doc = new XmlDocument();
string xmlfile = @“C:/Users/Administrator/Desktop/student.xml”;
doc.Load(xmlfile);
//获取根节点XmlElement表示节点(元素)
XmlNode player = doc.SelectSingleNode(“player”);
XmlNodeList personsEle = player.ChildNodes;
foreach (XmlElement personEle in personsEle){XmlElement name = personEle.ChildNodes[0]as XmlElement;XmlElement age = personEle.ChildNodes[1] as XmlElement;XmlElement strenth = personEle.ChildNodes[2] as XmlElement;XmlElement speed = personEle.ChildNodes[2] as XmlElement;Console.WriteLine(name.InnerText + age.InnerText + strenth.InnerText+speed.InnerText);}}
5)节点的删除
static void DeleteXML()
{
XmlDocument doc = new XmlDocument();
doc.Load(@“C:/Users/Administrator/Desktop/student.xml”);
XmlNode player = doc.SelectSingleNode("player");XmlNodeList personsEle = player.ChildNodes;foreach (XmlElement personEle in personsEle){if (personEle.Name.Equals("player01")){player.RemoveChild(personEle);//Console.WriteLine("delete success");}}doc.Save(@"C:/Users/Administrator/Desktop/student.xml");}
补:多层级XML中的元素查找
原XML文件:
比如将player下的equipment的子类的SWORD改变。
方法一:白痴方法:
static void searchAndChange(){XmlDocument doc = new XmlDocument();//载入文件try{doc.Load(@"C:/Users/Administrator/Desktop/check.xml");}catch (System.Xml.XmlException){throw new Exception("load fail");}XmlNode player = doc.SelectSingleNode("player");XmlNodeList playerID = player.ChildNodes;foreach (XmlElement playerson in playerID){if (playerson.Name.Equals("player02")){XmlNodeList grandsons = playerson.ChildNodes;foreach (XmlElement grandson in grandsons){if (grandson.Name.Equals("equipment")){XmlNode finalselect = grandson.SelectSingleNode("sword");finalselect.InnerText = "japansword";Console.WriteLine("success in searchAndChange");}}}}doc.Save(@"C:/Users/Administrator/Desktop/check.xml");}
结果如下:
方法二:递归方法:
不会
方法三:C#的LINQ
方法四:XML的函数
例:
static void recursionSearch()
{
XmlDocument doc = new XmlDocument();
//载入文件
try
{
doc.Load(@“C:/Users/Administrator/Desktop/check.xml”);
}
catch (System.Xml.XmlException)
{
throw new Exception(“load fail”);
}
XmlNode player = doc.SelectSingleNode(“player”);
XmlNodeList playerID = player.ChildNodes;
foreach (XmlElement playerson in playerID)
{
if (playerson.Name.Equals(“player02”))
{
XmlNode son = playerson.LastChild.SelectSingleNode(“sword”);
son.InnerText = “Englishsword”;
}
}
doc.Save(@“C:/Users/Administrator/Desktop/check.xml”);
}
三)JSON的数据保存
4)Unityd的ScriptableObject(實質為保存一個二級制文件)
可以看一下B站UP主他的視頻。
https://www.bilibili.com/video/BV1CJ41157DR
Unity的数据本地储存的集中方法相关推荐
- 数据本地存储方法封装(笔记)localStorage、sessionStorage
数据本地存储方法封装(笔记)localStorage.sessionStorage 方法: import storage from 'good-storage'const SELLER_KEY = ' ...
- [Redux/Mobx] redux的数据存储和本地储存有什么区别?
[Redux/Mobx] redux的数据存储和本地储存有什么区别? Redux存储的数据本质上都是JS变量,都是在内存中的,页面刷新就会消失 本质存储是像localStorage Cookie In ...
- 微信小程序表单提交php存储,微信小程序实现form表单本地储存数据
本文实例为大家分享了微信小程序实现form表单本地储存数据的具体代码,供大家参考,具体内容如下 效果图: 主要利用小程序的getStorage来实现异步本地储存. 小程序目录结构如下: 新建项目前,为 ...
- 关于Unity中的本地存储
本地存储 在做游戏的时候,经常需要在本机存储一些数据,比如闯关类游戏要记录闯到第几关,做单机的时候要把数据保存到本地,下次启动的时候数据存在,就是把数据保存到磁盘里面或者手机的flash闪存里面. U ...
- js监听地址栏变化_vue中本地储存也可以实时监听
网上看到的这个方法 在项目里使用了 贼爽啊,分享下 顺便说一下 localStorage也实用 比如 在同一个页面里边 不同位置 两个变量的呈现都是使用的本地储存且一个变量修改,第二个变量也要实时变化 ...
- react本地储存_如何使用React和本地存储构建freeCodeCamp的配方框
react本地储存 by Edward Njoroge 爱德华·尼约格(Edward Njoroge) 如何使用React和本地存储构建freeCodeCamp的配方框 (How to build f ...
- javascript中本地储存、离线缓存、地理定位、网络状态
本地储存: 实际开发中某些内容是不需要放到服务器中,而是放到了浏览器中,需要的时候可以快速的访问,甚至页面刷新也可能不会丢失数据,容量较大:这里介绍两种数据存储方式:sessionStorage约5M ...
- react本地储存_如何在React项目中利用本地存储
react本地储存 以及为什么要这么做. 本地存储是现代Web浏览器固有的Web API. 它允许网站/应用程序在浏览器中存储数据(简单和有限),从而使数据在以后的浏览器会话中可用. 在开始学习本教程 ...
- Unity3D研究院之Unity中连接本地或局域网MySQL数据库
用户名 Email 游戏蛮牛 手机端 开启辅助访问 腾讯QQ 立即注册 登录 用户名 自动登录 找回密码 密码 登录 注册帐号 [Unity5.X版本开始预售啦!] 扫一扫,访问微社区 </ ...
最新文章
- c语言周传生教材答案,C语言程序设计与实践(普通高等教育“十二五”规划教材)...
- 处理通知栏点击操作_解读 | 企业主动披露申请 e操作来啦
- 解决sublime text无法安装插件问题
- C语言——反弹球游戏(第三阶段
- Oracle 11g R2手动配置EM(转)
- 压缩包安装mySQL 与 Qt中使用mySQL
- 服务器第二代型号,SK Hynix公开第二代服务器用SSD
- 计算机课堂听课情况记录表模板,【教师听课记录表】_教师听课评课记录表模板Word版...
- 从源码分析非线程安全集合类的不安全迭代器
- 算法解读:基本的算法
- 如何理解封装,继承,多态?
- 【自然语言处理】【实体匹配】PromptEM:用于低资源广义实体匹配的Prompt-tuning
- 开源项目推荐系列(短信网关)
- pacs系统服务器配置,PACS系统部及配置说明.doc
- 互动媒体技术——《代码本色》习作二:向量
- 题解-hzy loves segment tree I
- python中如何导入torch_[PyTorch入门]之数据导入与处理
- Java 集合框架(5)---- Map 相关类解析(中)
- 牛客网-精华专题-前端校招面试题目合集
- dnn降噪_芯片量产已超百万,「探境科技」发布AI双麦降噪语音识别方案